使用循环创建SQL表

时间:2018-02-10 19:15:43

标签: php mysql

我是SQL和PHP的新手。我想在数据库中创建一个带有循环的SQL表,其中列数为' Q'。请帮助我理解下面代码中的错误,因为它返回的表只有一个列名Q1。感谢。

ini_set('max_execution_time', 120);

$i = 1;

while ($i <= $QNos){

  $column = 'Q'.$i;
  $sql= "CREATE TABLE IF NOT EXISTS answerkey_$Test_ID ($column 
  VARCHAR(5))";
  $result = mysqli_query($link,$sql) or die ("ERROR: in Add columns" . 
  mysqli_error($link));
  $i++;
    }

1 个答案:

答案 0 :(得分:0)

问题

CREATE TABLE循环中有while个语句。

你还为它添加了一个IF NOT EXISTS子句,当while循环内的那行代码被发送到数据库并运行它时,它会执行以下操作。

  • 检查表answerkey_$Test_ID是否存在
    • 如果存在:
      它不会运行SQL语句
    • 如果不存在:
      它将使用语句声明的 one 列创建表。

如果你没有IF NOT EXISTS它只会创建表,仍然只有一个列,第一次执行语句,那么,每次在while循环运行中的代码,MySql会抛出错误,PHP对该错误的处理取决于您的配置以及如何处理它,但是,您仍然会得到一个只有一列的表。

解决方案

CREATE TABLE循环之外取while语句,你应该只在循环中添加一个列,如下所示:

ini_set('max_execution_time', 120);

$sql= "CREATE TABLE IF NOT EXISTS answerkey_$Test_ID (Q1 VARCHAR(5))";
$result = mysqli_query($link,$sql) or die ("ERROR: in Add columns" . 
    mysqli_error($link));

// I'm assuming you want to start the columns at 1
$i = 2;

while ($i <= $QNos) {

    $column = 'Q'.$i;
    $sql= "ALTER TABLE answerkey_$Test_ID ADD COLUMN $column VARCHAR(5))";
    $result = mysqli_query($link,$sql) or die ("ERROR: in Add columns" . 
    mysqli_error($link));
    $i++;
}