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.