多查询和自动递增?
Multi query and auto increment?
我很难解决这个问题。问题出在我执行所有数据库查询的 database.php 中。我正在创建的这个新函数有一个 foreach 循环,它在其中添加到一个多查询,当循环完成时,所有查询都会被执行。 (多查询适用于我的其他功能)
MySQL table 有一个带有 auto_increment 的主键 ID 列,当查询尝试插入它时 returns 出错。
所以我在查询中省略了 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;
奇怪的是,当我在 auto_increment id 应该起作用的地方添加 $round 时。
$event .= "INSERT INTO table_info VALUES ('$round', '$userid', '$round', '$event');";
加载 table 并获取最新的 id 然后 +1 只是为了将其填充到查询中似乎是一种浪费。
- 感谢您的宝贵时间
你需要做的是因为你没有插入到 table 上的每一列 - 因为你通过让 MySQL 使用 [=] 处理这个正确地避免了 race conditions
12=] 列 - 您需要在插入时定义要插入的列:
INSERT INTO table_info (column names here separated by commas)
VALUES ( '$userid', '$round', '$event');
$event .= "INSERT INTO table_info (`user_id_column_name`,`round_column_name`,`event_column_name`) VALUES ('$userid', '$round', '$event');";
如果值的个数小于字段总数,您需要指定列
如果您不想指定列名称并允许 mysql 处理 AUTO_INCREMENT 您的 ID 字段,您应该将其发送为 NULL 值。请参阅下面的代码:
$event .= "INSERT INTO table_info VALUES (NULL, '$userid', '$round', '$event');";
我很难解决这个问题。问题出在我执行所有数据库查询的 database.php 中。我正在创建的这个新函数有一个 foreach 循环,它在其中添加到一个多查询,当循环完成时,所有查询都会被执行。 (多查询适用于我的其他功能)
MySQL table 有一个带有 auto_increment 的主键 ID 列,当查询尝试插入它时 returns 出错。
所以我在查询中省略了 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;
奇怪的是,当我在 auto_increment id 应该起作用的地方添加 $round 时。
$event .= "INSERT INTO table_info VALUES ('$round', '$userid', '$round', '$event');";
加载 table 并获取最新的 id 然后 +1 只是为了将其填充到查询中似乎是一种浪费。
- 感谢您的宝贵时间
你需要做的是因为你没有插入到 table 上的每一列 - 因为你通过让 MySQL 使用 [=] 处理这个正确地避免了 race conditions
12=] 列 - 您需要在插入时定义要插入的列:
INSERT INTO table_info (column names here separated by commas)
VALUES ( '$userid', '$round', '$event');
$event .= "INSERT INTO table_info (`user_id_column_name`,`round_column_name`,`event_column_name`) VALUES ('$userid', '$round', '$event');";
如果值的个数小于字段总数,您需要指定列
如果您不想指定列名称并允许 mysql 处理 AUTO_INCREMENT 您的 ID 字段,您应该将其发送为 NULL 值。请参阅下面的代码:
$event .= "INSERT INTO table_info VALUES (NULL, '$userid', '$round', '$event');";