我正在开发一个新项目并第一次使用参数化查询(PHP 和 MySQL DB)。我读到他们参数化的查询被缓存了,但我想知道它们被缓存了多长时间。例如,假设我有一个函数“getAllUsers()”,它从用户表中获取所有活动用户 ID 的列表,并且对于每个 ID,创建一个用户对象并且对函数“getUser($user)”的调用是用于设置对象的其他属性。'getUser()' 函数有它自己准备好的查询,函数末尾有一个 stmt->close()。
如果我这样做,我在“getUser()”中的参数化查询是否完全利用了缓存,或者在每个 stmt->close() 之后查询是否从缓存中销毁?
注意:如果页面只需要单个用户对象的数据,我也会使用 getUser() 函数,所以我想这样做以确保如果用户表发生更改,我只需要更新一个查询。
这是做这样的事情的正确方法还是有更好的方法?
更新:有趣,刚刚在 php.net 的准备语句手册上看到了这个(http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)
使用准备好的语句并不总是执行语句的最有效方式。只执行一次的准备好的语句比未准备的语句会导致更多的客户端-服务器往返。
所以我想参数化查询的主要好处是防止 SQL 注入,而不一定要加快速度,除非它是一次重复的查询。