Como adicionar uma nova coluna à tabela MYSQL?

100

Estou tentando adicionar uma nova coluna à minha tabela MYSQL usando PHP. Não tenho certeza de como alterar minha tabela para que a nova coluna seja criada. Na minha mesa de avaliação tenho:

assessmentid | q1 | q2 | q3 | q4 | q5 

Digamos que eu tenha uma página com uma caixa de texto e digito q6na caixa de texto e pressiono um botão e a tabela é atualizada para:

assessmentid | q1 | q2 | q3 | q4 | q5 | q6

Meu código:

<?php 
include 'core/init.php';
include 'core/admininit.php';
include 'includes/overall/overall_header.php'; 
adminprotect_page();
include 'includes/adminmenu.php'; 
?>      
<?php

mysql_query("ALTER TABLE `assessment` ADD newq INT(1) NOT NULL AFTER `q10`");

?>
<h1>Input Career Name</h1>

    <form method="post" action="">

      Career Name
      <input type="text" name="newq" size="20">

     <input type="submit"
      name="submit" value="Submit">

</body>
</html>
Steven Trainor
fonte
3
RTLM
Marc B,
Não tenho certeza de como formular minha consulta, tenho isso e não funciona .. $ sql = mysql_query ("SELECT * FROM assessment"); if (! $ sql) {mysql_query ("ALTER TABLE assessmentADD q6INT (1) NOT NULL APÓS q5"); echo 'Q6 criado'; } ELSE {// a partir daqui, continue a página normalmente! echo 'Q6 já existe!';
Steven Trainor
1
Os comentários de @StevenTrainor não são o melhor lugar para o código-fonte. Se você está mostrando onde está tendo seu problema, isso deve fazer parte da pergunta. Você poderia editar sua pergunta para incluir a fonte?
Nick Freeman
código ruim. mysql_query retornará falso booleano em QUALQUER falha, não apenas quando você estiver tentando adicionar um campo duplicado. sempre verifique o mysql_error()que deu errado. por exemplo $result = mysql_query($sql) or die(mysql_error());.
Marc B de
O que essa pergunta tem a ver com PHP?
Kolob Canyon

Respostas:

237

sua mesa:

q1 | q2 | q3 | q4 | q5

você também pode fazer

ALTER TABLE yourtable ADD q6 VARCHAR( 255 ) after q5
Dima
fonte
2
Obrigado, Funcionou com - mysql_query ("ALTER TABLE assessmentADD q6INT (1) NOT NULL AFTER q5");
Steven Trainor
Como posso nomear a coluna com o nome que digito em uma caixa de texto?
Steven Trainor
1
o valor da caixa de texto deve estar em $ _POST ['newq'] após o envio
Dima
9
@StevenTrainor: Do não usar a corda em sua caixa de texto como tal na instrução SQL. Você deve ter certeza de escapar dele para evitar uma vulnerabilidade de injeção de SQL.
Costi Ciudatu 01 de
2
Estamos em 2015 e as pessoas ainda estão tentando se preparar para vulnerabilidades de injeção de sql—: facepalm:
CommandZ
8
 $table  = 'your table name';
 $column = 'q6'
 $add = mysql_query("ALTER TABLE $table ADD $column VARCHAR( 255 ) NOT NULL");

você pode mudar VARCHAR( 255 ) NOT NULLpara o datatypeque quiser.

Abdullah Salma
fonte
Entendi, obrigado, como posso nomear a coluna com o nome que digito em uma caixa de texto?
Steven Trainor
1
@StevenTrainor o que você quer dizer com textbox? se você quer dizer o inputque type='text'escrever$column = $_POST['textbox'];
Abdullah Salma,
@StevenTrainor primeiro você precisa nomear sua entrada name='textbox'ou alterar a caixa de texto $column = $_POST['textbox'];para o nome da entrada ...
Abdullah Salma
6
  • Você pode adicionar uma nova coluna no final de sua tabela

    ALTER TABLE assessment ADD q6 VARCHAR( 255 )

  • Adicionar coluna ao início da tabela

    ALTER TABLE assessment ADD q6 VARCHAR( 255 ) FIRST

  • Adicionar coluna ao lado de uma coluna especificada

    ALTER TABLE assessment ADD q6 VARCHAR( 255 ) after q5

e mais opções aqui

Amarnath
fonte
3

Algo como:

$db = mysqli_connect("localhost", "user", "password", "database");
$name = $db->mysqli_real_escape_string($name);
$query = 'ALTER TABLE assesment ADD ' . $name . ' TINYINT NOT NULL DEFAULT \'0\'';
if($db->query($query)) {
    echo "It worked";
}

Não testei, mas deve funcionar.

Glitch Desire
fonte
Obrigado - Como posso nomear a coluna com o nome que digito em uma caixa de texto?
Steven Trainor
Substitua minha $nameatribuição por: $name = $db->mysqli_real_escape_string($_GET['input']);presumindo que você envie seu formulário normalmente. Se for ajax, é um pouco mais complexo.
Glitch Desire
0

Com base no seu comentário, parece que você só está adicionando a nova coluna se: mysql_query("SELECT * FROM assessment");retornar falso. Provavelmente não era isso que você queria. Tente remover o '!' na frente de $ sql na primeira instrução 'if'. Portanto, seu código será semelhante a:

$sql=mysql_query("SELECT * FROM assessment");
if ($sql) {
 mysql_query("ALTER TABLE assessment ADD q6 INT(1) NOT NULL AFTER q5");
 echo 'Q6 created'; 
}else...
Ryan Epp
fonte
0

Você deve normalizar seu banco de dados para evitar a criação de colunas em tempo de execução.

Faça 3 mesas:

  1. avaliação
  2. questão
  3. assessment_question (colunas assessmentId, questionId)

Coloque as perguntas e avaliações em suas respectivas tabelas e vincule-as por meio de assessment_question usando chaves estrangeiras.

Erik van Velzen
fonte
0

para WORDPRESS:

global $wpdb;


$your_table  = $wpdb->prefix. 'My_Table_Name';
$your_column =                'My_Column_Name'; 

if (!in_array($your_column, $wpdb->get_col( "DESC " . $your_table, 0 ) )){  $result= $wpdb->query(
    "ALTER     TABLE $your_table     ADD $your_column     VARCHAR(100)     CHARACTER SET utf8     NOT NULL     "  //you can add positioning phraze: "AFTER My_another_column"
);}
T.Todua
fonte
0
ALTER TABLE `stor` ADD `buy_price` INT(20) NOT NULL ;
Shinwar ismail
fonte