我的目标
向MySQL表添加多个列。我有两个问题:
1)如何做到这一点
2)这是一个坏主意,如果是这样,为什么?
我想要这样做的理由:
我有一个带有系统命名字段集的表单(例如field_1 field_2等)。我想将该数据发布到页面并将其存储到mysql表中,我希望这些字段输入相应名称的列(即列名为field_1 field_2等)
不是手动为每个字段名称手动创建列,而是循环任务似乎很明显。
然而,研究here和here似乎告诉我这种方法非法恐怖,我找不到实际的解决方案。
我的尝试:
$mysqli = new mysqli("localhost","user","password","db");
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$i = 1;
while ($i <= 14)
{
$column = 'field_'.$i;
$sql= '"ALTER TABLE supply ADD '.$column.' VARCHAR(45)"';
$mysqli->query($sql);
printf("Affected rows (ALTER): %d\n", $mysqli->affected_rows);
$i++;
}
这似乎运行没有错误,但受影响的行消息给了我(每个循环,所以其中14个):
受影响的行(ALTER): - 1
并且未添加列。
任何人都可以告诉我我的错误,或者更好的方法来调试出错的地方?另外,如果这是一个不明智的事情,你可以解释为什么以及我应该考虑做什么呢?谢谢。
答案 0 :(得分:3)
这是因为当你只使用语句时设置了affected_rows
:
使用行,表中有数据。
当您使用ALTER
时,您的结果应为true
或false
,因为您不使用数据,只需编辑表格的结构。
$result = $mysqli->query($sql) ;
if ($result){
echo "Table is updated. New column {$column} added" ;
}
此外,这里正确的SQL将是:
$sql = "ALTER TABLE supply ADD {$column} VARCHAR(45) ; " ;