Rob*_*bie 11 php mysql pdo prepared-statement
PDO准备好的陈述应该在使用后释放吗?如果是这样,怎么样?具体来说,我问的是MySQL - 你怎么能,也应该DEALLOCATE PREPARE
通过PDO 打电话.(编辑:澄清一下,这个问题并不是指仿效准备,而是真正的准备.)
此外 - 这会释放结果集(大时)吗?
说明:
我已经看到了代码
$stmnt = $db->prepare($sql);
$stmnt->execute($aParams);
$stmnt = null;
Run Code Online (Sandbox Code Playgroud)
这让我想知道这是做什么的,何时,如果f unset($stmnt);
会有所不同?
手册表明
准备好查询后,数据库将分析,编译和优化其执行查询的计划.[...]通过使用预准备语句,应用程序避免重复分析/编译/优化循环.
这往往表明你应该取消分配语句,MySQL有能力.所以,
DEALLOCATE PREPARE
,怎么打电话为了完整性,另一个提到"free_result"和"close"函数的SO问题mysqli_()
表明释放语句实际上增加了时间(除非你有大量的内存使用并需要空间).但是"free_result"不同于释放SQL服务器而不是缓存准备好的语句.
PDO 准备好的语句在使用后是否应该释放?如果是这样,怎么办?
在 MySQL 的背景下?没有为什么?
默认情况下, PDO模拟准备好的语句。这意味着 PDO 本身会执行参数替换、转义等操作,并向下发送 SQL 块,而不是使用本机准备好的语句。
虽然您可以打开它,但您仍然不需要明确关闭句柄,除非您还使用无缓冲查询。仅让语句句柄超出范围或将其设置为 null 不会关闭游标。同样,这仅在您使用无缓冲查询时才重要。如果不是,那么让它超出范围或将其设置为 null 就足以彻底关闭句柄。
您还链接到DEALLOCATE PREPARE
. 仅当使用 SQL 字符串手动调用时才需要该语法。这是一个与正在使用的MySQL C-level API-based prepared statementsPREPARE
完全独立的操作。(好吧,也许你正在使用,但它实际上是同一件事。)PDO_MYSQL
mysqlnd