Comment ajouter une nouvelle colonne à la table MYSQL?


100

J'essaye d'ajouter une nouvelle colonne à ma table MYSQL en utilisant PHP. Je ne sais pas comment modifier ma table afin que la nouvelle colonne soit créée. Dans mon tableau d'évaluation, j'ai:

assessmentid | q1 | q2 | q3 | q4 | q5 

Disons que j'ai une page avec une zone de texte et que je tape q6dans la zone de texte et appuyez sur un bouton, puis le tableau est mis à jour pour:

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

Mon code:

<?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>


Je ne sais pas comment formuler ma requête, j'ai ceci et cela ne fonctionne pas .. $ sql = mysql_query ("SELECT * FROM evaluation"); if (! $ sql) {mysql_query ("ALTER TABLE assessmentADD q6INT (1) NOT NULL APRES q5"); echo 'Q6 créé'; } ELSE {// à partir d'ici, continuez la page comme d'habitude! echo 'Q6 existe déjà!';
Steven Trainor

1
Les commentaires @StevenTrainor ne sont pas le meilleur endroit pour le code source. Si vous montrez où vous rencontrez votre problème, cela devrait faire partie de la question. Pourriez-vous modifier votre question pour inclure la source?
Nick Freeman

mauvais code. mysql_query retournera boolean false en cas d'échec, pas seulement lorsque vous essayez d'ajouter un champ en double. vérifiez toujours mysql_error()ce qui ne va pas. par exemple $result = mysql_query($sql) or die(mysql_error());.
Marc B

Qu'est-ce que cette question a à voir avec PHP?
Kolob Canyon

Réponses:


238

ta table:

q1 | q2 | q3 | q4 | q5

tu peux aussi faire

ALTER TABLE yourtable ADD q6 VARCHAR( 255 ) after q5

2
Merci, Cela a fonctionné avec - mysql_query ("ALTER TABLE assessmentADD q6INT (1) NOT NULL APRÈS q5");
Steven Trainor

Comment puis-je nommer la colonne quel que soit le nom que je saisis dans une zone de texte?
Steven Trainor

1
la valeur de la zone de texte doit être dans $ _POST ['newq'] après la soumission
Dima

9
@StevenTrainor: n'utilisez pas la chaîne dans votre zone de texte en tant que telle dans l'instruction SQL. Vous devez vous assurer de l'échapper afin d'éviter une vulnérabilité d'injection SQL.
Costi Ciudatu

2
Nous sommes en 2015 et les gens essaient toujours de se mettre en place pour les vulnérabilités d'injection SQL -: facepalm:
CommandZ

8
 $table  = 'your table name';
 $column = 'q6'
 $add = mysql_query("ALTER TABLE $table ADD $column VARCHAR( 255 ) NOT NULL");

vous pouvez changer VARCHAR( 255 ) NOT NULLce que datatypevous voulez.


Merci, comment puis-je nommer la colonne quel que soit le nom que je tape dans une zone de texte?
Steven Trainor

1
@StevenTrainor qu'entendez-vous par textbox? si vous voulez dire un inputquoi type='text'écrire$column = $_POST['textbox'];
Abdullah Salma

@StevenTrainor vous devez d'abord nommer votre entrée name='textbox'ou changer la zone de texte $column = $_POST['textbox'];pour le nom de l'entrée ...
Abdullah Salma

6
  • Vous pouvez ajouter une nouvelle colonne à la fin de votre tableau

    ALTER TABLE assessment ADD q6 VARCHAR( 255 )

  • Ajouter une colonne au début du tableau

    ALTER TABLE assessment ADD q6 VARCHAR( 255 ) FIRST

  • Ajouter une colonne à côté d'une colonne spécifiée

    ALTER TABLE assessment ADD q6 VARCHAR( 255 ) after q5

et plus d'options ici


3

Quelque chose comme:

$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";
}

Je ne l'ai pas testé mais devrait fonctionner.


Merci - Comment puis-je nommer la colonne quel que soit le nom que je saisis dans une zone de texte?
Steven Trainor

Remplacez ma $namemission par: en $name = $db->mysqli_real_escape_string($_GET['input']);supposant que vous soumettez votre formulaire normalement. Si c'est ajax, c'est un peu plus complexe.
Glitch Desire

0

D'après votre commentaire, il semble que vous n'ajoutiez la nouvelle colonne que si: mysql_query("SELECT * FROM assessment");renvoie false. Ce n'est probablement pas ce que vous vouliez. Essayez de supprimer le "!" devant $ sql dans la première instruction «if». Donc, votre code ressemblera à:

$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...

0

Vous devriez envisager de normaliser votre base de données pour éviter de créer des colonnes au moment de l'exécution.

Faites 3 tableaux:

  1. évaluation
  2. question
  3. evaluation_question (colonnes evaluationId, questionId)

Placez les questions et les évaluations dans leurs tableaux respectifs et associez-les via evaluation_question à l'aide de clés étrangères.


0

pour 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"
);}

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.