0

我的目标

将多个列添加到 MySQL 表中。我有两个担忧:

1)如何做到这一点

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

我想要这样做的原因:

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

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

然而,这里这里的研究似乎告诉我这种方法会引起人们的恐惧,我没有找到实际的解决方案。

我的尝试:

$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

并且没有添加列。

谁能告诉我我的错误,或者更好的方法来调试出了什么问题?此外,如果这是一件不明智的事情,您能否解释一下为什么以及我应该考虑做什么?谢谢你。

4

1 回答 1

3

那是因为affected_rows当你只使用语句时设置:

  • 插入
  • 更新
  • 代替
  • 删除

它与行一起使用,与表中的数据一起使用。

当您使用ALTER结果时应该是trueor false,因为您不使用数据,您只需编辑表的结构。

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

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

$sql = "ALTER TABLE supply ADD {$column} VARCHAR(45) ; " ;
于 2013-09-10T17:32:33.130 回答