我正在尝试使用 PHP 将新列添加到我的 MYSQL 表中。我不确定如何更改我的表以便创建新列。在我的评估表中,我有:
assessmentid | q1 | q2 | q3 | q4 | q5
假设我有一个带有文本框的页面,我在文本框中输入
q6
并按按钮,然后表格更新为:
assessmentid | q1 | q2 | q3 | q4 | q5 | q6
我的代码:
<?php
mysql_query("ALTER TABLE `assessment` ADD newq INT(1) NOT NULL AFTER `q10`");
?>
<form method="post" action="">
<input type="text" name="newq" size="20">
<input type="submit" name="submit" value="Submit">
您的餐桌:
q1 | q2 | q3 | q4 | q5
你也可以做
ALTER TABLE yourtable ADD q6 VARCHAR( 255 ) after q5
$table = 'your table name';
$column = 'q6'
$add = mysql_query("ALTER TABLE $table ADD $column VARCHAR( 255 ) NOT NULL");
您可以将
VARCHAR( 255 ) NOT NULL
更改为您想要的 datatype
。
您可以在表格末尾添加新列
ALTER TABLE assessment ADD q6 VARCHAR( 255 )
将列添加到表格的开头
ALTER TABLE assessment ADD q6 VARCHAR( 255 ) FIRST
在指定列旁边添加列
ALTER TABLE assessment ADD q6 VARCHAR( 255 ) after q5
还有更多选项这里
类似:
$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";
}
尚未测试,但应该可以。
您应该考虑规范化数据库以避免在运行时创建列。
制作3张桌子:
将问题和评估放在各自的表中,并使用外键通过assessment_question将它们链接在一起。
根据您的评论,您似乎只在以下情况下添加新列:
mysql_query("SELECT * FROM assessment");
返回 false。这可能不是你想要的。尝试删除“!”在第一个“if”语句中的 $sql 前面。所以你的代码将如下所示:
$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...
对于 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"
);}
ALTER TABLE `stor` ADD `buy_price` INT(20) NOT NULL ;
PHP代码中ALTER TABLE的问题就在这一行:
mysql_query(“ALTER TABLE评估ADD newq INT(1) NOT NULL AFTER q10”);
它应该在 q5 之后,因为您的表示例中没有 q10。所以,就变成了 ALTER TABLE 评估 ADD newq INT(1) NOT NULL AFTER q5;