繁体   English   中英

在mysqli预处理语句程序样式中获取最后一个插入id的正确方法是什么?

[英]Which is correct way to get last inserted id in mysqli prepared statements procedural style?

我正在使用mysqli预处理语句在这样的表中插入记录

$link = mysqli_connect('localhost', 'my_user', 'my_password', 'world');

/* check connection */
if (!$link) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$stmt = mysqli_prepare($link, "INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
mysqli_stmt_bind_param($stmt, 'sssd', $code, $language, $official, $percent);

$code = 'DEU';
$language = 'Bavarian';
$official = "F";
$percent = 11.2;

/* execute prepared statement */
mysqli_stmt_execute($stmt);

if(mysqli_stmt_affected_rows($stmt) > 0){
//if insert is successful then get the insrted id.


}

/* close statement and connection */
mysqli_stmt_close($stmt);

/* close connection */
mysqli_close($link);

并且想获得最后插入的id,因为该表具有record_num字段,该字段是自动增量。

所以我的问题是我应该在函数内放置连接名称或语句名称。

即1)

echo mysqli_insert_id($link);

资料来源: http//php.net/manual/en/mysqli.insert-id.php

2)

echo mysqli_stmt_insert_id($stmt);

资料来源: http//php.net/manual/en/mysqli-stmt.insert-id.php

哪一个是正确的? $ stmt中哪一个会给我最后一个ins id?

  • 没有其他插入使用相同的stmt同一页面进行。*

更新:

根据http://php.net/manual/en/mysqli-stmt.insert-id.php的说明

我只做单插入,所以我想我可以使用

mysqli_stmt_insert_id($stmt)

但是在使用预处理语句进行多次插入时

echo mysqli_insert_id($link);

是最好的做法。

你应该用

mysqli_insert_id($link);

由于您在PHP手册中提到了这一说明,因此我们提到了

mysqli_stmt_insert_id

应该注意的是,使用mysqli_stmt-> insert_id不会导致为每次执行准备好的insert语句返回唯一ID。 实际上,似乎返回了第一个插入ID。 如果您使用相同的预准备语句执行多个插入(一次调用mysqli_stmt :: prepare以及对给定语句多次调用mysqli_stmt :: execute()),并且需要为每个插入保留唯一ID,请使用mysqli_connection-> INSERT_ID。

对于程序语言,你需要使用下面的代码,mysqli_insert_id($ link));

是的,正如你在1点提到的那样。

正确是1) - 链接,如文件中所述:

http://php.net/manual/en/mysqli.insert-id.php

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM