当前位置: 首页 > 面试题库 >

MySQL和PDO:理论上PDO :: lastInsertId会失败吗?

祝叶五
2023-03-14
问题内容

我已经考虑了一段时间了。

考虑一个比例很大的Web应用程序,例如,每秒执行数百万个SQL查询。

我运行我的代码:

$q = $db->prepare('INSERT INTO Table
                 (First,Second,Third,Fourth)
          VALUES (?,?,?,?)');
$q->execute(array($first,$second,$third,$fourth));

然后紧接着,我想获取此最后一个查询的自动递增的ID:

$id = $db->lastInsertId();

lastInsertId是否有可能失败,即获取 我的两个代码块 之间 执行的某些SQL插入查询的ID ?

次要:

如果失败了,堵塞这种可能的泄漏的最佳方法是什么?

可以肯定的是,创建另一个SQL查询以从数据库中获取正确的ID是否更安全?


问题答案:

只要PDO实施并未真正做到无所事事,那将永远是安全的。以下是来自MySQL的信息last_insert_id

生成的ID在每个连接的服务器中维护。这意味着函数返回给定客户端的值是针对该客户端影响AUTO_INCREMENT列的最新语句生成的第一个AUTO_INCREMENT值。即使其他客户端生成自己的AUTO_INCREMENT值,该值也不会受到其他客户端的影响。此行为可确保每个客户端都可以检索自己的ID,而不必担心其他客户端的活动,也不需要锁或事务。



 类似资料:
  • 问题内容: 这是我到目前为止阅读的内容: 由于MySQL的本机准备绕过了查询缓存,因此PDO的准备仿真在性能上更好。 MySQL的本机准备更好地提高了安全性(防止SQL注入)。 MySQL的本机准备更好地用于错误报告。 我不知道这些陈述的真实性。在选择MySQL接口时,我最大的担心是防止SQL注入。第二个问题是性能。 我的应用程序当前使用过程MySQLi(没有准备好的语句),并且大量利用了查询缓存

  • 这是我到目前为止读到的关于的内容: PDO的prepare仿真性能更好,因为MySQL的本机prepare绕过查询缓存。 MySQL的本机prepare在安全性方面更好(防止SQL注入)。 MySQL的本机prepare更适合错误报告。 我不知道这些说法有多真实了。我在选择MySQL接口时最关心的是防止SQL注入。第二个关注点是业绩。 我的应用程序目前使用过程式MySQLi(没有准备好的语句),并

  • 问题内容: 我正在将所有站点代码从使用mysql_ *函数转换为PDO。对于我的需求,PDO上的PHP文档尚不清楚。它为您提供了要使用的功能,但没有详细介绍它们在不同情况下的功能。 基本上,我有一个mysql全文搜索: 实际的语句要长得多,但这基本上就是它的作用。 我的问题是,如何将其纳入PDO? 我知道您不是要在位置标记周围使用引号,那么您是否将它们放在AGAINST()函数中?我包括他们吗?如

  • 问题内容: 这个问题已经在这里有了答案 : mysqli或PDO-优缺点是什么?[已关闭] (13个答案) 6年前关闭。 我对PHP相当陌生,并使用标准的MySQL数据库调用建立了一个中型网站。但是,我最近了解了PDO,并希望从社区中了解是否值得从MySQL切换到PDO。为了安全起见,我一直在使用。 有关该网站的信息: 我混合使用和。调用返回的数据并不庞大(使用最多返回30条记录)。也不会有很多s

  • pdo

    PDO Object Medoo是一个基于PDO的项目.你通过 $database->pdo, 能够使用更多的PDO方法, 预定义,事务 , 回滚 等. 更多关于 PDO 的使用, 请阅读: http://php.net/manual/en/class.pdo.php. Transaction (事务) $database->pdo->beginTransaction();$database->i

  • pdo

    PDO Object Medoo是一个基于PDO的项目.你通过 $database->pdo, 能够使用更多的PDO方法, 预定义,事务 , 回滚 等. 更多关于 PDO 的使用, 请阅读: http://php.net/manual/en/class.pdo.php. Transaction (事务) $database->pdo->beginTransaction();$database->i