使用PHP循环向MySQL表添加多个列

时间:2013-09-10 17:29:38

标签: php mysql loops alter

我的目标

向MySQL表添加多个列。我有两个问题:

1)如何做到这一点

2)这是一个坏主意,如果是这样,为什么?

我想要这样做的理由:

我有一个带有系统命名字段集的表单(例如field_1 field_2等)。我想将该数据发布到页面并将其存储到mysql表中,我希望这些字段输入相应名称的列(即列名为field_1 field_2等)

不是手动为每个字段名称手动创建列,而是循环任务似乎很明显。

然而,研究herehere似乎告诉我这种方法非法恐怖,我找不到实际的解决方案。

我的尝试:

$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

并且未添加列。

任何人都可以告诉我我的错误,或者更好的方法来调试出错的地方?另外,如果这是一个不明智的事情,你可以解释为什么以及我应该考虑做什么呢?谢谢。

1 个答案:

答案 0 :(得分:3)

这是因为当你只使用语句时设置了affected_rows

  • 插入
  • 更新
  • 更换
  • 删除

使用行,表中有数据。

当您使用ALTER时,您的结果应为truefalse,因为您不使用数据,只需编辑表格的结构。

$result = $mysqli->query($sql) ;
if ($result){
  echo "Table is updated. New column {$column} added" ;
}

此外,这里正确的SQL将是:

$sql = "ALTER TABLE supply ADD {$column} VARCHAR(45) ; " ;