多查询和自动递增?

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');";