为什么mysqli_insert_id()总是返回0?

时间:2013-03-11 06:12:31

标签: php mysql

我有以下代码。 mysqli_insert_id()(在本例中为“$ last_row”),它应该返回表的最后一行,总是返回0.为什么会这样?

<?php
include('connect-db.php');
$submit_date = date("Ymd");
$content = mysqli_real_escape_string($connection, htmlspecialchars($_POST['editor']));
$ip_address = $_SERVER['REMOTE_ADDR'];
$last_row = mysqli_insert_id($connection);

if ($content != '') {

$sql = "INSERT INTO source ( track_id, submit_date, ip, content) VALUES ('$last_row', '$submit_date','$ip_address','$content')";

if (!mysqli_query($connection,$sql))
  {
  die('Error: ' . mysqli_error($connection));
  }

echo $last_row;
mysqli_close($connection);
}

?>

4 个答案:

答案 0 :(得分:20)

mysqli_insert_id 会返回表格最后一行的ID。来自the docs,它:

  

...返回由具有AUTO_INCREMENT属性的列的表上的查询生成的ID。如果上一个查询不是INSERTUPDATE语句,或者修改后的表没有AUTO_INCREMENT属性的列,则此函数将返回零

(我的重点)

也就是说,如果您在自动生成ID的插入后立即运行它,则在插入的同一连接上,它将返回为该插入生成的ID。

上面链接的文档中的示例说明了这一点:

$query = "INSERT INTO myCity VALUES (NULL, 'Stuttgart', 'DEU', 'Stuttgart', 617000)";
$mysqli->query($query);

printf ("New Record has id %d.\n", $mysqli->insert_id);

答案 1 :(得分:16)

要获得结果,您应该放置

$last_row = mysqli_insert_id($connection);
INSERT查询后

答案 2 :(得分:1)

对于来到这里的其他人,也许您尝试了INSERT IGNORE INTO,并且您已经插入了UNIQUE值。在这种情况下,此id为零。

你也会得到&#34;零&#34;如果MySQL用完了连接。我不是持久连接的专家,但这可能对某人有帮助吗?

  

正如您可能知道PHP“mysql”扩展支持持久化   连接但它们在新的“mysqli”扩展中被禁用    - 彼得·扎伊采夫

答案 3 :(得分:0)

具有此功能的另一个陷阱-如果您正在这样做:

INSERT INTO table (col1, col2) VALUES (1, 2) ON DUPLICATE KEY UPDATE col2=3

并且由于重复的密钥和UPDATE不会发生插入,就像我的情况一样,如果col2已经设置为3,则mysqli_insert_id也会返回0。