Bagaimana cara menambahkan kolom baru ke tabel MYSQL?

100

Saya mencoba menambahkan kolom baru ke tabel MYSQL saya menggunakan PHP. Saya tidak yakin bagaimana cara mengubah tabel saya sehingga kolom baru dibuat. Di tabel penilaian saya, saya memiliki:

assessmentid | q1 | q2 | q3 | q4 | q5 

Katakanlah saya memiliki halaman dengan kotak teks dan saya mengetik q6ke kotak teks dan menekan tombol maka tabel diperbarui menjadi:

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

Kode saya:

<?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
sumber
Saya tidak yakin bagaimana mengatakan kueri saya, saya memiliki ini dan tidak berhasil .. $ sql = mysql_query ("PILIH * DARI penilaian"); if (! $ sql) {mysql_query ("ALTER TABLE assessmentADD q6INT (1) NOT NULL AFTER q5"); echo 'Q6 dibuat'; } LAINNYA {// dari sini lanjutkan saja halaman seperti biasa! echo 'Q6 sudah ada!';
Steven Trainor
1
Komentar @StevenTrainor bukanlah tempat terbaik untuk kode sumber. Jika Anda menunjukkan di mana Anda mengalami masalah Anda, itu harus menjadi bagian dari pertanyaan. Bisakah Anda mengedit pertanyaan Anda untuk memasukkan sumbernya?
Nick Freeman
kode buruk. mysql_query akan mengembalikan boolean false pada setiap kegagalan, tidak hanya ketika Anda mencoba menambahkan bidang duplikat. selalu periksa mysql_error()untuk melihat apa yang salah. mis $result = mysql_query($sql) or die(mysql_error());.
Marc B
Apa hubungannya pertanyaan ini dengan PHP?
Kolob Canyon

Jawaban:

238

meja Anda:

q1 | q2 | q3 | q4 | q5

Anda juga bisa melakukannya

ALTER TABLE yourtable ADD q6 VARCHAR( 255 ) after q5
Dima
sumber
2
Terima kasih, Ini bekerja dengan - mysql_query ("ALTER TABLE assessmentADD q6INT (1) NOT NULL AFTER q5");
Steven Trainor
Bagaimana cara memberi nama kolom dengan nama apa pun yang saya ketik ke dalam kotak teks?
Steven Trainor
1
nilai kotak teks harus dalam $ _POST ['newq'] setelah Anda mengirimkan
Dima
9
@StevenTrainor: Do tidak menggunakan string dalam kotak teks seperti itu dalam pernyataan SQL. Anda harus memastikan Anda menghindarinya untuk menghindari kerentanan injeksi SQL.
Costi Ciudatu
2
Ini tahun 2015 dan orang-orang masih mencoba mengatur diri mereka sendiri untuk kerentanan injeksi sql—: facepalm:
CommandZ
8
 $table  = 'your table name';
 $column = 'q6'
 $add = mysql_query("ALTER TABLE $table ADD $column VARCHAR( 255 ) NOT NULL");

Anda bisa berubah VARCHAR( 255 ) NOT NULLmenjadi apa pun yang datatypeAnda inginkan.

Abdullah Salma
sumber
Oke, terima kasih, bagaimana saya bisa memberi nama kolom dengan nama apa pun yang saya ketikkan ke dalam kotak teks?
Steven Trainor
1
@StevenTrainor apa yang Anda maksud textbox? jika Anda bermaksud inputapa type='text'tulis$column = $_POST['textbox'];
Abdullah Salma
@StevenTrainor pertama Anda perlu memberi nama input Anda name='textbox'atau mengubah textbox $column = $_POST['textbox'];menjadi nama input ...
Abdullah Salma
6
  • Anda dapat menambahkan kolom baru di akhir tabel Anda

    ALTER TABLE assessment ADD q6 VARCHAR( 255 )

  • Tambahkan kolom ke awal tabel

    ALTER TABLE assessment ADD q6 VARCHAR( 255 ) FIRST

  • Tambahkan kolom di sebelah kolom tertentu

    ALTER TABLE assessment ADD q6 VARCHAR( 255 ) after q5

dan lebih banyak opsi di sini

amarnath
sumber
3

Sesuatu seperti:

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

Belum mengujinya tetapi seharusnya berhasil.

Glitch Desire
sumber
Terima kasih - Bagaimana cara memberi nama kolom dengan nama apa pun yang saya ketikkan ke dalam kotak teks?
Steven Trainor
Gantikan $nametugas saya dengan: dengan $name = $db->mysqli_real_escape_string($_GET['input']);asumsi Anda mengirimkan formulir Anda secara normal. Jika ajax itu sedikit lebih kompleks.
Glitch Desire
0

Berdasarkan komentar Anda, sepertinya Anda hanya menambahkan kolom baru jika: mysql_query("SELECT * FROM assessment");mengembalikan salah. Mungkin itu bukan yang Anda inginkan. Coba hapus '!' di depan $ sql dalam pernyataan 'jika' pertama. Jadi kode Anda akan terlihat seperti:

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

Anda harus melihat ke dalam normalisasi database Anda untuk menghindari pembuatan kolom pada waktu proses.

Buat 3 tabel:

  1. penilaian
  2. pertanyaan
  3. assessment_question (kolom assessmentId, questionId)

Letakkan pertanyaan dan penilaian di tabel masing-masing dan hubungkan bersama melalui assessment_question menggunakan kunci asing.

Erik van Velzen
sumber
0

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