多查询和自动增量?

时间:2016-09-03 20:16:22

标签: php mysql auto-increment

我在解决这个问题时遇到了一些麻烦。问题出在我的database.php中,我在那里进行所有数据库查询。我正在创建的这个新函数有一个foreach循环,它添加到一个多查询,当循环结束时,所有查询都被执行。 (多查询在我的其他功能中起作用)

MySQL表有一个带有auto_increment的主键id列,当查询尝试INSERT INTO时,它返回错误。

所以我在查询中省略了id,简单地让MySQL用自动增量来处理它。这是麻烦开始,多查询不会执行,并告诉我有一个错误。如果我只是用我自己的值填写id就可以了。

database.php看起来像这样

    $event .= "INSERT INTO table_info VALUES ('$userid', '$round', '$event');";

    // Execute multi query
    if (!$this->connection->multi_query($event)) {
        echo "Multi query failed: (" . $mysqli->errno . ") " . $mysqli->error;
    }

    do {
        if ($res = $this->connection->store_result()) {
            var_dump($res->fetch_all(MYSQLI_ASSOC));
            $res->free();
        }
    } while ($this->connection->more_results() && $this->connection->next_result());
    return;

奇怪的是,当我添加$ round时,auto_increment id应该是有效的。

    $event .= "INSERT INTO table_info VALUES ('$round', '$userid', '$round', '$event');";

加载表并获取最新的ID似乎是一种浪费,然后+1只是为了将其填入查询。

  • 感谢您的时间

3 个答案:

答案 0 :(得分:1)

您需要做的是因为您没有插入表格中的每一列 - 正如您通过让race conditions列处理MySQL而正确避免auto_increment - 您需要定义插入要插入的列:

 INSERT INTO table_info (column names here separated by commas)
  VALUES ( '$userid', '$round', '$event');

答案 1 :(得分:1)

$event .= "INSERT INTO table_info (`user_id_column_name`,`round_column_name`,`event_column_name`) VALUES ('$userid', '$round', '$event');";

如果值no小于字段总数

,则需要指定列

答案 2 :(得分:0)

如果您不想指定列名并允许mysql处理您的id字段的AUTO_INCREMENT,则应该使用NULL值发送它。请参阅以下代码:

$event .= "INSERT INTO table_info VALUES (NULL, '$userid', '$round', '$event');";