我在解决这个问题时遇到了一些麻烦。问题出在我的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只是为了将其填入查询。
答案 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');";