Wie füge ich eine neue Spalte zur MYSQL-Tabelle hinzu?

100

Ich versuche, mit PHP eine neue Spalte zu meiner MYSQL-Tabelle hinzuzufügen. Ich bin nicht sicher, wie ich meine Tabelle so ändern soll, dass die neue Spalte erstellt wird. In meiner Bewertungstabelle habe ich:

assessmentid | q1 | q2 | q3 | q4 | q5 

Angenommen, ich habe eine Seite mit einem Textfeld und tippe q6in das Textfeld ein und drücke eine Taste. Dann wird die Tabelle aktualisiert auf:

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

Mein 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>
Steven Trainor
quelle
Ich bin mir nicht sicher, wie ich meine Anfrage formulieren soll. Ich habe dies und es funktioniert nicht. $ Sql ​​= mysql_query ("SELECT * FROM Assessment"); if (! $ sql) {mysql_query ("ALTER TABLE assessmentADD q6INT (1) NOT NULL AFTER q5"); Echo 'Q6 erstellt'; } ELSE {// von hier aus einfach weiter wie gewohnt! Echo 'Q6 existiert bereits!';
Steven Trainor
1
@StevenTrainor-Kommentare sind nicht der beste Ort für Quellcode. Wenn Sie zeigen, wo Sie Ihr Problem haben, sollte dies ein Teil der Frage sein. Könnten Sie Ihre Frage so bearbeiten, dass sie die Quelle enthält?
Nick Freeman
schlechter Code. mysql_query gibt bei JEDEM Fehler boolean false zurück, nicht nur, wenn Sie versuchen, ein doppeltes Feld hinzuzufügen. Überprüfen Sie immer mysql_error(), was schief gelaufen ist. zB $result = mysql_query($sql) or die(mysql_error());.
Marc B
Was hat diese Frage mit PHP zu tun?
Kolob Canyon

Antworten:

237

dein Tisch:

q1 | q2 | q3 | q4 | q5

Sie können auch tun

ALTER TABLE yourtable ADD q6 VARCHAR( 255 ) after q5
Dima
quelle
2
Danke, es hat funktioniert mit - mysql_query ("ALTER TABLE assessmentADD q6INT (1) NOT NULL AFTER q5");
Steven Trainor
Wie kann ich der Spalte einen beliebigen Namen geben, den ich in ein Textfeld eingebe?
Steven Trainor
1
Der Wert des Textfelds sollte nach dem Senden in $ _POST ['newq'] sein
Dima
9
@StevenTrainor: Do nicht verwenden , um die Zeichenfolge im Textfeld als solche in der SQL - Anweisung. Sie müssen sicherstellen, dass Sie es umgehen, um eine SQL-Injection-Sicherheitsanfälligkeit zu vermeiden.
Costi Ciudatu
2
Es ist 2015 und die Leute versuchen immer noch, sich auf SQL-Injection-Schwachstellen
einzustellen
8
 $table  = 'your table name';
 $column = 'q6'
 $add = mysql_query("ALTER TABLE $table ADD $column VARCHAR( 255 ) NOT NULL");

Sie können sich VARCHAR( 255 ) NOT NULLin das verwandeln, was datatypeSie wollen.

Abdullah Salma
quelle
Verstanden, danke, wie kann ich die Spalte benennen, welchen Namen ich auch immer in ein Textfeld eingebe?
Steven Trainor
1
@StevenTrainor was meinst du damit textbox? wenn du meinst inputwas type='text'schreiben$column = $_POST['textbox'];
Abdullah Salma
@StevenTrainor zuerst müssen Sie Ihre Eingabe benennen name='textbox'oder Textfeld in $column = $_POST['textbox'];den Namen der Eingabe ändern ...
Abdullah Salma
6
  • Sie können am Ende Ihrer Tabelle eine neue Spalte hinzufügen

    ALTER TABLE assessment ADD q6 VARCHAR( 255 )

  • Fügen Sie am Anfang der Tabelle eine Spalte hinzu

    ALTER TABLE assessment ADD q6 VARCHAR( 255 ) FIRST

  • Fügen Sie eine Spalte neben einer angegebenen Spalte hinzu

    ALTER TABLE assessment ADD q6 VARCHAR( 255 ) after q5

und mehr Optionen hier

Amarnath
quelle
3

Etwas wie:

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

Habe es nicht getestet, sollte aber funktionieren.

Glitch Desire
quelle
Danke - Wie kann ich der Spalte einen beliebigen Namen geben, den ich in ein Textfeld eingebe?
Steven Trainor
Ersetzen Sie meine $nameAufgabe durch: $name = $db->mysqli_real_escape_string($_GET['input']);vorausgesetzt, Sie senden Ihr Formular normal. Wenn es Ajax ist, ist es etwas komplexer.
Glitch Desire
0

Basierend auf Ihrem Kommentar sieht es so aus, als würden Sie die neue Spalte nur hinzufügen, wenn: mysql_query("SELECT * FROM assessment");false zurückgibt. Das wollten Sie wahrscheinlich nicht. Versuchen Sie, das '!' vor $ sql in der ersten 'if'-Anweisung. Ihr Code sieht also folgendermaßen aus:

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

Sie sollten sich mit der Normalisierung Ihrer Datenbank befassen, um zu vermeiden, dass zur Laufzeit Spalten erstellt werden.

Machen Sie 3 Tabellen:

  1. Bewertung
  2. Frage
  3. Assessment_Frage (Spalten AssessmentId, QuestionId)

Fügen Sie Fragen und Bewertungen in ihre jeweiligen Tabellen ein und verknüpfen Sie sie mithilfe von Assessment_question mithilfe von Fremdschlüsseln.

Erik van Velzen
quelle
0

für 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
quelle
0
ALTER TABLE `stor` ADD `buy_price` INT(20) NOT NULL ;
Shinwar ismail
quelle