¿Cómo agregar una nueva columna a la tabla MYSQL?

100

Estoy tratando de agregar una nueva columna a mi tabla MYSQL usando PHP. No estoy seguro de cómo modificar mi tabla para que se cree la nueva columna. En mi tabla de evaluación tengo:

assessmentid | q1 | q2 | q3 | q4 | q5 

Digamos que tengo una página con un cuadro de texto y escribo q6en el cuadro de texto y presiono un botón, luego la tabla se actualiza a:

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

Mi 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
fuente
No estoy seguro de cómo redactar mi consulta, tengo esto y no funciona .. $ sql = mysql_query ("SELECT * FROM Assessment"); if (! $ sql) {mysql_query ("ALTER TABLE assessmentADD q6INT (1) NOT NULL DESPUÉS q5"); echo 'Q6 creado'; } ELSE {// ¡desde aquí simplemente continúa la página como de costumbre! echo '¡Q6 ya existe!';
Steven Trainor
1
Los comentarios de @StevenTrainor no son el mejor lugar para el código fuente. Si está mostrando dónde tiene su problema, debería ser parte de la pregunta. ¿Podría editar su pregunta para incluir la fuente?
Nick Freeman
código incorrecto. mysql_query devolverá un valor booleano falso en CUALQUIER error, no solo cuando intente agregar un campo duplicado. Siempre revise mysql_error()para ver qué salió mal. ej $result = mysql_query($sql) or die(mysql_error());.
Marc B
¿Qué tiene que ver esta pregunta con PHP?
Kolob Canyon

Respuestas:

237

tu mesa:

q1 | q2 | q3 | q4 | q5

tu tambien puedes hacer

ALTER TABLE yourtable ADD q6 VARCHAR( 255 ) after q5
Dima
fuente
2
Gracias, funcionó con - mysql_query ("ALTER TABLE assessmentADD q6INT (1) NOT NULL AFTER q5");
Steven Trainor
¿Cómo puedo nombrar la columna con el nombre que escriba en un cuadro de texto?
Steven Trainor
1
el valor del cuadro de texto debe estar en $ _POST ['newq'] después de enviar
Dima
9
@StevenTrainor: Do no utilizar la cadena en su cuadro de texto como tal en la instrucción SQL. Debe asegurarse de escapar de él para evitar una vulnerabilidad de inyección de SQL.
Costi Ciudatu
2
Es 2015 y la gente todavía está tratando de prepararse para las vulnerabilidades de inyección SQL: facepalm:
CommandZ
8
 $table  = 'your table name';
 $column = 'q6'
 $add = mysql_query("ALTER TABLE $table ADD $column VARCHAR( 255 ) NOT NULL");

puedes cambiarte VARCHAR( 255 ) NOT NULLa lo datatypeque quieras.

Abdullah Salma
fuente
Entendido gracias, ¿cómo puedo nombrar la columna con el nombre que escriba en un cuadro de texto?
Steven Trainor
1
@StevenTrainor ¿a qué te refieres con textbox? si te refieres a inputqué type='text'escribir$column = $_POST['textbox'];
Abdullah Salma
@StevenTrainor primero debe nombrar su entrada name='textbox'o cambiar el cuadro de texto $column = $_POST['textbox'];al nombre de la entrada ...
Abdullah Salma
6
  • Puede agregar una nueva columna al final de su tabla

    ALTER TABLE assessment ADD q6 VARCHAR( 255 )

  • Agregar columna al comienzo de la tabla

    ALTER TABLE assessment ADD q6 VARCHAR( 255 ) FIRST

  • Agregar columna junto a una columna especificada

    ALTER TABLE assessment ADD q6 VARCHAR( 255 ) after q5

y más opciones aquí

amarnath
fuente
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";
}

No lo he probado, pero debería funcionar.

Glitch Desire
fuente
Gracias - ¿Cómo puedo nombrar la columna con el nombre que escriba en un cuadro de texto?
Steven Trainor
Reemplace mi $nametarea con: $name = $db->mysqli_real_escape_string($_GET['input']);asumiendo que envía su formulario normalmente. Si es ajax, es un poco más complejo.
Glitch Desire
0

Según su comentario, parece que solo agregará la nueva columna si: mysql_query("SELECT * FROM assessment");devuelve falso. Probablemente eso no sea lo que querías. Intente eliminar el '!' delante de $ sql en la primera instrucción 'if'. Entonces su código se verá así:

$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
fuente
0

Debería considerar normalizar su base de datos para evitar crear columnas en tiempo de ejecución.

Haz 3 tablas:

  1. evaluación
  2. pregunta
  3. Assessment_question (columnas AssessmentId, questionId)

Coloque preguntas y evaluaciones en sus respectivas tablas y vincúlelas a través de assessment_question utilizando claves externas.

Erik van Velzen
fuente
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
fuente
0
ALTER TABLE `stor` ADD `buy_price` INT(20) NOT NULL ;
Shinwar ismail
fuente