จะเพิ่มคอลัมน์ใหม่ในตาราง MYSQL ได้อย่างไร?


103

ฉันพยายามเพิ่มคอลัมน์ใหม่ในตาราง MYSQL โดยใช้ PHP ฉันไม่แน่ใจว่าจะแก้ไขตารางของฉันอย่างไรเพื่อให้สร้างคอลัมน์ใหม่ ในตารางการประเมินของฉันฉันมี:

assessmentid | q1 | q2 | q3 | q4 | q5 

สมมติว่าฉันมีหน้าที่มีกล่องข้อความและฉันพิมพ์q6ในกล่องข้อความแล้วกดปุ่มจากนั้นตารางจะอัปเดตเป็น:

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

รหัสของฉัน:

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


ฉันไม่แน่ใจว่าจะใช้คำค้นหาของฉันอย่างไรฉันมีสิ่งนี้และไม่ได้ผล .. $ sql = mysql_query ("SELECT * FROM assessment"); ถ้า (! $ sql) {mysql_query ("ALTER TABLE assessmentADD q6INT (1) NOT NULL AFTER q5"); echo 'สร้าง Q6 แล้ว'; } ELSE {// จากที่นี่เพียงแค่ดำเนินการต่อตามปกติ! echo 'Q6 มีอยู่แล้ว!';
Steven Trainor

1
ความคิดเห็นของ @StevenTrainor ไม่ใช่สถานที่ที่ดีที่สุดสำหรับซอร์สโค้ด หากคุณกำลังแสดงให้เห็นว่าคุณกำลังประสบปัญหาอยู่ที่ไหนควรเป็นส่วนหนึ่งของคำถาม คุณสามารถแก้ไขคำถามเพื่อรวมแหล่งที่มาได้หรือไม่
Nick Freeman

รหัสไม่ดี mysql_query จะคืนค่าบูลีนเท็จเมื่อเกิดความล้มเหลวใด ๆ ไม่ใช่เฉพาะเมื่อคุณพยายามเพิ่มฟิลด์ที่ซ้ำกัน ตรวจสอบอยู่เสมอmysql_error()ว่ามีอะไรผิดพลาด เช่น$result = mysql_query($sql) or die(mysql_error());.
Marc B

คำถามนี้เกี่ยวข้องกับ PHP อย่างไร?
Kolob Canyon

คำตอบ:


243

โต๊ะของคุณ:

q1 | q2 | q3 | q4 | q5

คุณยังสามารถทำได้

ALTER TABLE yourtable ADD q6 VARCHAR( 255 ) after q5

2
ขอบคุณมันใช้งานได้กับ - mysql_query ("ALTER TABLE assessmentADD q6INT (1) NOT NULL AFTER q5");
Steven Trainor

ฉันจะตั้งชื่อคอลัมน์เป็นชื่อที่ฉันพิมพ์ลงในกล่องข้อความได้อย่างไร
Steven Trainor

1
ค่าของกล่องข้อความควรอยู่ใน $ _POST ['newq'] หลังจากที่คุณส่ง
Dima

10
@StevenTrainor: Do ไม่ใช้สตริงในกล่องข้อความของคุณเป็นเช่นนี้ในคำสั่ง SQL คุณต้องแน่ใจว่าคุณได้หลบหนีเพื่อหลีกเลี่ยงช่องโหว่การแทรก SQL
Costi Ciudatu

2
เป็นปี 2015 และผู้คนยังคงพยายามตั้งค่าตัวเองสำหรับช่องโหว่การฉีด sql -: facepalm:
CommandZ

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

คุณสามารถเปลี่ยนVARCHAR( 255 ) NOT NULLเป็นสิ่งที่datatypeคุณต้องการได้


เข้าใจแล้วฉันจะตั้งชื่อคอลัมน์ที่ฉันพิมพ์ลงในกล่องข้อความได้อย่างไร
Steven Trainor

1
@StevenTrainor คุณหมายถึงtextboxอะไร? ถ้าคุณหมายถึงinputสิ่งที่type='text'เขียน$column = $_POST['textbox'];
อับดุลลาห์ซัลมา

@StevenTrainor ก่อนอื่นคุณต้องตั้งชื่ออินพุตของคุณname='textbox'หรือเปลี่ยนกล่องข้อความ$column = $_POST['textbox'];เป็นชื่อของอินพุต ...
อับดุลลาห์ซัลมา

6
  • คุณสามารถเพิ่มคอลัมน์ใหม่ที่ท้ายตารางของคุณ

    ALTER TABLE assessment ADD q6 VARCHAR( 255 )

  • เพิ่มคอลัมน์ในจุดเริ่มต้นของตาราง

    ALTER TABLE assessment ADD q6 VARCHAR( 255 ) FIRST

  • เพิ่มคอลัมน์ถัดจากคอลัมน์ที่ระบุ

    ALTER TABLE assessment ADD q6 VARCHAR( 255 ) after q5

และตัวเลือกอื่น ๆที่นี่


3

สิ่งที่ต้องการ:

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

ยังไม่ได้ทดสอบ แต่ควรใช้งานได้


ขอบคุณ - ฉันจะตั้งชื่อคอลัมน์ที่ฉันพิมพ์ลงในกล่องข้อความได้อย่างไร?
Steven Trainor

แทนที่$nameงานของฉันด้วย: $name = $db->mysqli_real_escape_string($_GET['input']);สมมติว่าคุณส่งแบบฟอร์มตามปกติ ถ้ามันซับซ้อนกว่านี้หน่อย
Glitch Desire

0

จากความคิดเห็นของคุณดูเหมือนว่าคุณจะเพิ่มคอลัมน์ใหม่ถ้า: mysql_query("SELECT * FROM assessment");ส่งกลับเท็จ นั่นอาจไม่ใช่สิ่งที่คุณต้องการ ลองลบเครื่องหมาย "!" ด้านหน้าของ $ sql ในคำสั่ง 'if' แรก ดังนั้นรหัสของคุณจะมีลักษณะดังนี้:

$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

คุณควรตรวจสอบการทำให้ฐานข้อมูลของคุณเป็นปกติเพื่อหลีกเลี่ยงการสร้างคอลัมน์ในรันไทม์

ทำ 3 ตาราง:

  1. การประเมิน
  2. คำถาม
  3. Assessment_question (คอลัมน์ assessmentId, questionId)

ใส่คำถามและการประเมินในตารางที่เกี่ยวข้องและเชื่อมโยงเข้าด้วยกันผ่านการประเมินโดยใช้คีย์ต่างประเทศ


0

สำหรับ 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"
);}

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.