我的目标
向 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 个):
Affected rows (ALTER): -1
并且未添加列。
任何人都可以告诉我我的错误,或者更好的调试错误的方法吗?此外,如果这是不明智的做法,您能否解释一下为什么以及我应该考虑改为做什么?谢谢。
最佳答案
那是因为 affected_rows
是在您仅使用语句时设置的:
- 插入
- 更新
- 替换
- 删除
它处理行,处理表中的数据。
当您使用 ALTER
时,您的结果应该是 true
或 false
,因为您不处理数据,您只是编辑结构你的 table 。
$result = $mysqli->query($sql) ;
if ($result){
echo "Table is updated. New column {$column} added" ;
}
另外,这里正确的 SQL 应该是:
$sql = "ALTER TABLE supply ADD {$column} VARCHAR(45) ; " ;
关于php - 使用 PHP 循环向 MySQL 表添加多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18725346/