【问题标题】:Which is correct way to get last inserted id in mysqli prepared statements procedural style?在 mysqli 准备好的语句程序样式中获取最后插入的 id 的正确方法是什么?
【发布时间】:2014-08-10 17:52:43
【问题描述】:

我正在使用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 给我最后插入的 id?

  • 没有其他插入正在使用相同的 stmt 一个相同的页面完成..*

更新:

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

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

mysqli_stmt_insert_id($stmt)

但是在使用准备好的语句进行多次插入时使用

echo mysqli_insert_id($link);

是最佳实践。

【问题讨论】:

    标签: php mysqli prepared-statement


    【解决方案1】:

    你应该使用

    mysqli_insert_id($link);
    

    由于您向我们推荐的 PHP 手册中的此注释

    mysqli_stmt_insert_id

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2018-05-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-16
          • 2015-04-07
          • 2012-01-28
          • 2011-07-09
          • 1970-01-01
          相关资源
          最近更新 更多