我正在使用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?
更新
根据http://php.net/manual/en/mysqli-stmt.insert-id.php
的说明我只做一次插入所以我想我可以使用
mysqli_stmt_insert_id($stmt)
但是在使用
使用预准备语句进行多次插入时echo mysqli_insert_id($link);
是最佳做法。
答案 0 :(得分:4)
你应该使用
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-&gt ; INSERT_ID。
答案 1 :(得分:1)
您需要在代码下面使用过程语言, mysqli_insert_id($链接));
是的,正如你在1点提到的那样。
答案 2 :(得分:1)
正确是1) - 链接,如文档中所述: