2013-03-11 142 views
8

我有以下代码。应该返回表的最后一行的mysqli_insert_id()(在本例中为“$ last_row”)总是返回0.为什么这样呢?为什么mysqli_insert_id()总是返回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); 
} 

?> 
+1

“*返回值:AUTO_INCREMENT字段的值这由前面的查询更新**如果在连接上没有以前的查询,或者查询没有更新AUTO_INCREMENT值,则返回零**。*“ – DCoder 2013-03-11 06:14:13

+0

Look:http://php.net/manual/en /mysqli.insert-id.php – 2015-02-12 01:08:49

回答

16

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); 
11

要得到的结果,您应该在INSERT查询

+1

在mysqli_insert_id()中指定$连接很重要。否则,ID不能被检索。 – Devner 2016-02-11 07:44:13

0

对于其他人后放置

$last_row = mysqli_insert_id($connection); 

来到这里,也许你试过了INSERT IGNORE INTO,并且你已经插入了一个UNIQUE值。在这种情况下,这个ID是零。

如果MySQL没有连接,你也会得到“零”。我不是持久连接的专家,但这可能有助于某人?

正如你可能知道PHP“MySQL的”扩展支持持续 连接,但他们在新的“mysqli的”扩展名被禁用 --Peter采夫