Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mysqli中使用PHP准备的语句时,blob字段的检索速度较慢_Php_Mysqli_Prepared Statement - Fatal编程技术网

在mysqli中使用PHP准备的语句时,blob字段的检索速度较慢

在mysqli中使用PHP准备的语句时,blob字段的检索速度较慢,php,mysqli,prepared-statement,Php,Mysqli,Prepared Statement,本着提高安全性的精神,我实现了一个函数来执行准备好的语句 但当我尝试获取base64编码的blob内容(大约30-50KB)时,我遇到了问题 如果我在不使用预处理语句的情况下运行查询,它会运行得很快 对于准备好的语句,它在调用时暂停:mysqli\u stmt\u fetch($statement) 运行几乎需要一分钟或更长时间,最终返回结果 只要我去掉mysqli\u stmt\u fetch($statement)调用或从select查询中排除blob字段,事情就会像往常一样快速运行 我希望

本着提高安全性的精神,我实现了一个函数来执行准备好的语句

但当我尝试获取base64编码的blob内容(大约30-50KB)时,我遇到了问题

如果我在不使用预处理语句的情况下运行查询,它会运行得很快

对于准备好的语句,它在调用时暂停:
mysqli\u stmt\u fetch($statement)
运行几乎需要一分钟或更长时间,最终返回结果

只要我去掉
mysqli\u stmt\u fetch($statement)
调用或从select查询中排除blob字段,事情就会像往常一样快速运行


我希望有人知道这里发生了什么。到目前为止,我在互联网上搜索答案,运气很差。

我会将二进制blob保存在MySQL以外的其他文件中,在MySQL中保留一个简单的标识符,以便知道从何处获取它。 MySQL从来不是存储大块二进制数据的首选方式。
至少它可以解决您的问题,您可能应该尝试放弃base64开销(这也增加了33%的大小)

我想尝试的另一个解决方案是查看是否有更新版本的驱动程序或服务器。或者尝试其他驱动程序,例如


第三种解决方案是尝试将字段类型从BLOB更改为TEXT,base64在正常的ascii范围内。

对我来说,这听起来像是驱动程序中的一个bug。但是这个斑点首先是为了什么?也许你还可以提供两个不同查询的完整代码($statement)。无模式的数据被填充到一个blob中。我只是暂时排除了这个blob。但很可能会再次碰到这个问题,所以我必须考虑测试另一个驱动程序,看看会发生什么。我所在部门的许多程序员在MySQL中抛出了很多类似的值(我知道,这是一个糟糕的做法),因为他们无法访问中心文件存储,如HDFS或其他高可用性数据存储。唉,我们现在已经把自己逼到了一个角落。