Jak dodać nową kolumnę do tabeli MYSQL?


103

Próbuję dodać nową kolumnę do mojej tabeli MYSQL za pomocą PHP. Nie jestem pewien, jak zmienić tabelę, aby została utworzona nowa kolumna. W mojej tabeli ocen mam:

assessmentid | q1 | q2 | q3 | q4 | q5 

Powiedzmy, że mam stronę z polem tekstowym i piszę q6w polu tekstowym i naciskam przycisk, a następnie tabela jest aktualizowana do:

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

Mój kod:

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


Nie jestem pewien, jak sformułować moje zapytanie, mam to i nie działa .. $ sql = mysql_query ("SELECT * FROM assessment"); if (! $ sql) {mysql_query ("ALTER TABLE assessmentADD q6INT (1) NOT NULL AFTER q5"); echo „Utworzono Q6”; } ELSE {// stąd po prostu kontynuuj stronę jak zwykle! echo 'Q6 już istnieje!';
Steven Trainor

1
Komentarze @StevenTrainor nie są najlepszym miejscem na kod źródłowy. Jeśli pokazujesz, gdzie masz problem, powinno to być częścią pytania. Czy możesz edytować swoje pytanie, aby uwzględnić źródło?
Nick Freeman

zły kod. mysql_query zwróci wartość logiczną false w przypadku KAŻDEGO niepowodzenia, nie tylko wtedy, gdy próbujesz dodać zduplikowane pole. zawsze sprawdzaj, mysql_error()co poszło nie tak. np $result = mysql_query($sql) or die(mysql_error());.
Marc B

Co to pytanie ma wspólnego z PHP?
Kolob Canyon

Odpowiedzi:


243

Twój stół:

q1 | q2 | q3 | q4 | q5

możesz też zrobić

ALTER TABLE yourtable ADD q6 VARCHAR( 255 ) after q5

2
Dzięki, zadziałało z - mysql_query ("ALTER TABLE assessmentADD q6INT (1) NOT NULL AFTER q5");
Steven Trainor

Jak mogę nazwać kolumnę, jakąkolwiek nazwę wpisuję w polu tekstowym?
Steven Trainor

1
wartość pola tekstowego powinna być w $ _POST ['newq'] po przesłaniu
Dima

10
@StevenTrainor: Do nie używać znaków w polu tekstowym jako takie w instrukcji SQL. Musisz się upewnić, że uciekniesz przed tym, aby uniknąć luki w zabezpieczeniach typu SQL injection.
Costi Ciudatu

2
Jest rok 2015, a ludzie wciąż próbują skonfigurować się pod kątem luk w zabezpieczeniach sql injection—: facepalm:
CommandZ

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

możesz zmienić się VARCHAR( 255 ) NOT NULLw co datatypetylko zechcesz.


Rozumiem, jak mogę nazwać kolumnę, jakąkolwiek nazwę wpisuję w polu tekstowym?
Steven Trainor

1
@StevenTrainor co masz na myśli textbox? jeśli masz na myśli to, inputco type='text'piszesz$column = $_POST['textbox'];
Abdullah Salma

@StevenTrainor najpierw musisz nazwać swoje wejście name='textbox'lub zmienić pole tekstowe $column = $_POST['textbox'];na nazwę wejścia ...
Abdullah Salma

6
  • Możesz dodać nową kolumnę na końcu tabeli

    ALTER TABLE assessment ADD q6 VARCHAR( 255 )

  • Dodaj kolumnę na początku tabeli

    ALTER TABLE assessment ADD q6 VARCHAR( 255 ) FIRST

  • Dodaj kolumnę obok określonej kolumny

    ALTER TABLE assessment ADD q6 VARCHAR( 255 ) after q5

i więcej opcji tutaj


3

Coś jak:

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

Nie testowałem tego, ale powinno działać.


Dzięki - jak mogę nazwać kolumnę, jakąkolwiek nazwę wpisuję w polu tekstowym?
Steven Trainor

Zastąp moje $namezadanie: $name = $db->mysqli_real_escape_string($_GET['input']);zakładając, że prześlesz formularz normalnie. Jeśli to Ajax, jest to trochę bardziej złożone.
Glitch Desire

0

Na podstawie Twojego komentarza wygląda na to, że dodajesz nową kolumnę tylko wtedy, gdy: mysql_query("SELECT * FROM assessment");zwraca false. Prawdopodobnie nie tego chciałeś. Spróbuj usunąć znak „!” przed $ sql w pierwszej instrukcji „if”. Twój kod będzie więc wyglądał następująco:

$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

Powinieneś przyjrzeć się normalizacji bazy danych, aby uniknąć tworzenia kolumn w czasie wykonywania.

Zrób 3 tabele:

  1. oszacowanie
  2. pytanie
  3. assessment_question (kolumny assessmentId, questionId)

Umieść pytania i oceny w odpowiednich tabelach i połącz je ze sobą za pomocą assessment_question, używając kluczy obcych.


0

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.