栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用PHP是否可以在多个页面加载的服务器端缓存准备好的语句?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用PHP是否可以在多个页面加载的服务器端缓存准备好的语句?

当一个请求被服务时,PHP“清理”实例并释放资源和其他变量。这需要几个步骤。由于fastcgi在请求后使进程保持活动状态,因此不会执行所有步骤,也不会释放所有内存。有例如EG(persistent_list),它由mysql_pconnect(),pg_pconnect(),…使用,只要进程保持活动状态,就不会在请求之间清空此列表(可能取决于实际实现,但这会违背EG(persistent_list)的目的。如果使用持久连接,则脚本可能会在上一个请求期间获得“重用”连接。
要直接(重新)使用准备好的语句,您需要该语句(和该连接)的标识符。当使用(php-)postgresql时,这只是传递给pg_execute()的(连接方式)唯一字符串,因此您的脚本可以毫无问题地访问由另一个实例先前准备的语句(使用相同的连接)。
使用mysqli或PDO-
mysql,您需要一个资源/对象作为语句标识符。这是一个问题,因为mysqli和pdo扩展似乎都没有提供在请求之间将资源存储在EG(persist_list)中的方法,并且您也无法重新创建它。除非php-
fpm提供了这样的“服务”,否则似乎不可能直接重用mysql准备好的语句。
您所希望的就是MySQL的服务器端查询缓存。在最新版本中(请参阅链接),在使用准备好的语句时,它可能会识别该语句。但是即使那样,它也不会重新使用实际的准备好的语句:

对于通过二进制协议执行的准备好的语句,与查询缓存中的语句进行比较 是基于扩展?后的语句文本。
参数标记
。该语句仅与通过二进制协议执行的其他缓存语句进行比较。也就是说,出于查询缓存的目的,通过二进制协议发布的语句不同于通过文本协议发布的语句。

因此,如果我没记错的话,当前您将无法重新使用在php中先前请求期间准备的mysql语句。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/398906.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号