使用带有mysqli的PHP预处理语句时,缓慢检索blob字段

时间:2013-03-22 21:22:12

标签: php mysqli prepared-statement

本着提高安全性的精神,我实现了一个执行预处理语句的函数。

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

如果我在不使用预准备语句的情况下运行查询,它会快速运行。

使用准备好的声明,它在呼叫时停止:mysqli_stmt_fetch($statement) 并且需要将近一分钟或更长时间才能运行,最终会返回结果。

一旦我摆脱mysqli_stmt_fetch($statement)调用或从我的选择查询中排除blob字段,事情会像往常一样快速运行。

我希望有人知道这里发生了什么。到目前为止,我已经疏通了寻找答案的互联网。

1 个答案:

答案 0 :(得分:1)

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

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

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