php - MySQL 参数化查询 - 缓存持续时间

标签 php caching mysqli parameterized-query

<分区>

Possible Duplicate:
Are prepared statements cached server-side across multiple page loads with PHP?

我正在处理一个新项目,并且第一次使用参数化查询(PHP 和 MySQL 数据库)。我读到它们参数化查询被缓存,但我想知道它们被缓存了多长时间。例如,假设我有一个函数“getAllUsers()”,它从用户表中获取所有事件用户 ID 的列表,对于每个 ID,创建一个用户对象并调用函数“getUser($user)”用于设置对象的其他属性。 'getUser()' 函数有自己准备好的查询,函数末尾有一个 stmt->close()。

如果我这样做,我在“getUser()”中的参数化查询是否完全利用了缓存,或者查询是否在每次 stmt->close() 后从缓存中销毁?

注意:如果一个页面只需要单个用户对象的数据,我也会使用 getUser() 函数,所以我想这样做以确保如果用户表发生变化,我只需要更新一个查询。

这是执行此类操作的正确方法还是有更好的方法?

更新:有趣的是,刚刚在 php.net 的准备语句手册 (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) 上看到了这个

Using a prepared statement is not always the most efficient way of executing a statement. A prepared statement executed only once causes more client-server round-trips than a non-prepared statement.

所以我想参数化查询的主要好处是防止 SQL 注入(inject),不一定能加快速度,除非它是一次重复的查询。

最佳答案

调用 mysqli_stmt::close 将:

Closes a prepared statement. mysqli_stmt_close() also deallocates the statement handle.

因此无法使用语句的缓存版本进一步执行。 我不介意释放资源或关闭语句,因为无论如何 PHP 都会在脚本末尾为您完成。

此外,如果您正在使用循环(如您所述),请查看 mysqli_stmt::reset这会将准备好的语句重置为其原始状态(在准备调用之后)。

关于php - MySQL 参数化查询 - 缓存持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13964530/

相关文章:

php - 帮助在 mysql 中加入 JOIN

firefox - 如何获得缓存在 firefox 内存中的 mp3 文件?

php - 如何在 mysqli 中转换 mysql_result?

php - 如何检查MySQL中是否存在行? (即检查用户名或电子邮件是否存在于 MySQL 中)

php - MySQL数据库和导入日期问题

php - wp_query 中的错误? WordPress

php - 试图理解 array_uintersect 行为

php - Vagrant : Unable to create sessions, 缓存中的 Cakephp,缓存模型

asp.net - ASP.NET MVC 3 中每用户缓存的 "Safe handle has been closed"

php - 如何编写查询来查找不属于所选字段的记录?