Come aggiungere una nuova colonna alla tabella MYSQL?


100

Sto cercando di aggiungere una nuova colonna alla mia tabella MYSQL utilizzando PHP. Non sono sicuro di come modificare la mia tabella in modo da creare la nuova colonna. Nella mia tabella di valutazione ho:

assessmentid | q1 | q2 | q3 | q4 | q5 

Diciamo che ho una pagina con una casella q6di testo e digito nella casella di testo e premo un pulsante, quindi la tabella viene aggiornata in:

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

Il mio codice:

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


Non sono sicuro di come formulare la mia query, ho questo e non funziona .. $ sql = mysql_query ("SELECT * FROM assessment"); if (! $ sql) {mysql_query ("ALTER TABLE assessmentADD q6INT (1) NOT NULL AFTER q5"); echo 'Q6 creato'; } ELSE {// da qui continua la pagina come al solito! echo 'Q6 esiste già!';
Steven Trainor

1
I commenti di @StevenTrainor non sono il posto migliore per il codice sorgente. Se stai mostrando dove stai riscontrando il tuo problema, dovrebbe essere una parte della domanda. Potresti modificare la tua domanda per includere la fonte?
Nick Freeman

codice errato. mysql_query restituirà booleano false in QUALSIASI errore, non solo quando si tenta di aggiungere un campo duplicato. controlla sempre mysql_error()per vedere cosa è andato storto. ad es $result = mysql_query($sql) or die(mysql_error());.
Marc B

Cosa c'entra questa domanda con PHP?
Kolob Canyon

Risposte:


237

la tua tavola:

q1 | q2 | q3 | q4 | q5

puoi anche farlo

ALTER TABLE yourtable ADD q6 VARCHAR( 255 ) after q5

2
Grazie, ha funzionato con - mysql_query ("ALTER TABLE assessmentADD q6INT (1) NOT NULL AFTER q5");
Steven Trainor

Come posso denominare la colonna qualunque nome digito in una casella di testo?
Steven Trainor

1
il valore della casella di testo dovrebbe essere in $ _POST ['newq'] dopo l'invio
Dima

9
@StevenTrainor: non utilizzare la stringa nella casella di testo in quanto tale nell'istruzione SQL. Devi assicurarti di sfuggirgli per evitare una vulnerabilità di SQL injection.
Costi Ciudatu

2
È il 2015 e le persone stanno ancora cercando di prepararsi per le vulnerabilità di sql injection—: facepalm:
CommandZ

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

puoi trasformarti VARCHAR( 255 ) NOT NULLin ciò datatypeche vuoi.


Capito grazie, come posso nominare la colonna qualunque nome digito in una casella di testo?
Steven Trainor

1
@StevenTrainor cosa intendi con textbox? se intendi un inputcosa type='text'scrivi$column = $_POST['textbox'];
Abdullah Salma

@StevenTrainor prima devi dare un nome al tuo input name='textbox'o cambiare la casella di testo nel $column = $_POST['textbox'];nome dell'ingresso ...
Abdullah Salma

6
  • Puoi aggiungere una nuova colonna alla fine della tabella

    ALTER TABLE assessment ADD q6 VARCHAR( 255 )

  • Aggiungi colonna all'inizio della tabella

    ALTER TABLE assessment ADD q6 VARCHAR( 255 ) FIRST

  • Aggiungi colonna accanto a una colonna specificata

    ALTER TABLE assessment ADD q6 VARCHAR( 255 ) after q5

e altre opzioni qui


3

Qualcosa di simile a:

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

Non l'ho testato ma dovrebbe funzionare.


Grazie - Come posso denominare la colonna qualunque nome digito in una casella di testo?
Steven Trainor

Sostituisci il mio $nameincarico con: $name = $db->mysqli_real_escape_string($_GET['input']);supponendo che invii normalmente il modulo. Se è ajax è un po 'più complesso.
Glitch Desire

0

In base al tuo commento, sembra che tu stia aggiungendo la nuova colonna solo se: mysql_query("SELECT * FROM assessment");restituisce false. Probabilmente non è quello che volevi. Prova a rimuovere il carattere "!" davanti a $ sql nella prima istruzione "if". Quindi il tuo codice sarà simile 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...

0

È necessario esaminare la normalizzazione del database per evitare di creare colonne in fase di esecuzione.

Crea 3 tabelle:

  1. valutazione
  2. domanda
  3. assessment_question (colonne assessmentId, questionId)

Metti domande e valutazioni nelle rispettive tabelle e collegali insieme tramite assessment_question utilizzando chiavi esterne.


0

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.