Làm cách nào để thêm cột mới vào bảng MYSQL?


100

Tôi đang cố gắng thêm một cột mới vào bảng MYSQL của mình bằng PHP. Tôi không chắc về cách thay đổi bảng của mình để tạo cột mới. Trong bảng đánh giá của tôi, tôi có:

assessmentid | q1 | q2 | q3 | q4 | q5 

Giả sử tôi có một trang có hộp văn bản và tôi nhập q6vào hộp văn bản và nhấn một nút sau đó bảng được cập nhật thành:

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

Mã của tôi:

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


Tôi không chắc làm thế nào để từ truy vấn của mình, tôi có điều này và nó không hoạt động .. $ sql = mysql_query ("Đánh giá SELECT * FROM"); if (! $ sql) {mysql_query ("ALTER TABLE assessmentADD q6INT (1) NOT NULL AFTER q5"); echo 'Q6 đã tạo'; } ELSE {// từ đây chỉ cần tiếp tục trang như bình thường! echo 'Q6 đã tồn tại!';
Steven Trainor

1
@StevenTrainor nhận xét không phải là nơi tốt nhất cho mã nguồn. Nếu bạn đang cho thấy bạn đang gặp vấn đề ở đâu thì đó phải là một phần của câu hỏi. Bạn có thể chỉnh sửa câu hỏi của mình để bao gồm nguồn không?
Nick Freeman

mã xấu. mysql_query sẽ trả về boolean false khi BẤT KỲ lỗi nào, không chỉ khi bạn đang cố thêm một trường trùng lặp. luôn luôn kiểm tra mysql_error()xem có gì sai. vd $result = mysql_query($sql) or die(mysql_error());.
Marc B

Câu hỏi này liên quan gì đến PHP?
Kolob Canyon

Câu trả lời:


237

bảng của bạn:

q1 | q2 | q3 | q4 | q5

bạn cũng có thể làm

ALTER TABLE yourtable ADD q6 VARCHAR( 255 ) after q5

2
Cảm ơn, Nó đã hoạt động với - mysql_query ("ALTER TABLE assessmentADD q6INT (1) NOT NULL AFTER q5");
Steven Trainor

Làm cách nào để đặt tên cho cột bất kỳ tên nào tôi nhập vào hộp văn bản?
Steven Trainor

1
giá trị của hộp văn bản phải bằng $ _POST ['newq'] sau khi bạn gửi
Dima

9
@StevenTrainor: Đỗ không sử dụng chuỗi trong hộp văn bản của bạn như vậy trong câu lệnh SQL. Bạn phải chắc chắn rằng bạn thoát khỏi nó để tránh lỗ hổng SQL injection.
Costi Ciudatu

2
Đó là vào năm 2015 và mọi người vẫn đang cố gắng để thiết lập vươn lên dẫn trước cho vulnerabilities- sql injection: facepalm:
CommandZ

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

bạn có thể thay đổi VARCHAR( 255 ) NOT NULLthành những gì datatypebạn muốn.


Tôi hiểu rồi, cảm ơn, làm cách nào tôi có thể đặt tên cho cột bất kỳ tên nào tôi nhập vào hộp văn bản?
Steven Trainor

1
@StevenTrainor ý bạn là textboxgì? nếu bạn có nghĩa là một inputcái gì type='text'ghi$column = $_POST['textbox'];
Abdullah Salma

@StevenTrainor đầu tiên bạn cần đặt tên cho đầu vào của bạn name='textbox'hoặc thay đổi textbox trong $column = $_POST['textbox'];tên của các đầu vào ...
Abdullah Salma

6
  • Bạn có thể thêm một cột mới vào cuối bảng của mình

    ALTER TABLE assessment ADD q6 VARCHAR( 255 )

  • Thêm cột vào đầu bảng

    ALTER TABLE assessment ADD q6 VARCHAR( 255 ) FIRST

  • Thêm cột bên cạnh một cột được chỉ định

    ALTER TABLE assessment ADD q6 VARCHAR( 255 ) after q5

và nhiều tùy chọn hơn ở đây


3

Cái gì đó như:

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

Chưa thử nghiệm nó nhưng sẽ hoạt động.


Cảm ơn - Làm cách nào tôi có thể đặt tên cho cột bất kỳ tên nào tôi nhập vào hộp văn bản?
Steven Trainor

Thay thế $namebài tập của tôi bằng: $name = $db->mysqli_real_escape_string($_GET['input']);giả sử bạn gửi biểu mẫu bình thường. Nếu là ajax thì phức tạp hơn một chút.
Glitch Desire,

0

Dựa trên nhận xét của bạn, có vẻ như bạn chỉ thêm cột mới nếu: mysql_query("SELECT * FROM assessment");trả về false. Đó có lẽ không phải là những gì bạn muốn. Thử xóa dấu '!' phía trước $ sql trong câu lệnh 'if' đầu tiên. Vì vậy, mã của bạn sẽ giống như sau:

$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

Bạn nên xem xét việc chuẩn hóa cơ sở dữ liệu của mình để tránh tạo các cột trong thời gian chạy.

Lập 3 bảng:

  1. thẩm định, lượng định, đánh giá
  2. câu hỏi
  3. Assess_question (cột đánh giá, câu hỏiId)

Đặt các câu hỏi và đánh giá vào các bảng tương ứng của chúng và liên kết chúng với nhau thông qua Assess_question bằng cách sử dụng khóa ngoại.


0

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.