繁体   English   中英

mysqli_stmt_bind_result上的PHP奇怪的段错误

[英]PHP weird Seg-faults on mysqli_stmt_bind_result

当将PHP脚本从PHP 5.2迁移到PHP 5.3时,我偶然发现以下问题:脚本的一般用途是数据挖掘。 我有一个将数据添加到MySQL服务器的过程。 由于它确实是重复性的,因此(前一阵子)我重写了它以使用MySQLi,尤其是准备好的语句,因为总共要执行3个查询。 无论如何,现在,在PHP 5.3服务器上,脚本在以下行崩溃:

mysqli_stmt_bind_result($prepCheck, $id1);

其中$prepCheck与创建$prepCheck = mysqli_prepare($con, $checkQuery) or die("Error"); 该查询在MySQL服务器(即$ checkQuery)上运行良好,并且PHP代码也在以前的服务器上运行。

使用strace运行脚本不会显示任何内容,因为它的最后一件事是对echo "Execute";的系统调用echo "Execute"; ,即29936 19:44:18 write(1, "Execute\\n", 8) = 8

连接对象不是FALSE ,即使是,它也应该因另一个错误而失败,对吗?

这是最奇怪的部分:运行脚本时,此过程不会失败 ,从而限制了访问的页面数并且脚本成功完成。 但是,当我设置一个更高的限制时,它总是失败, 总是在第一次调用此过程时,恰好在此行。

如果有人有什么建议可能导致这种情况,将不胜感激。

如果有人需要看大图,我可以粘贴代码,但是过程很长而且很枯燥(可能就​​是脚本失败的原因:)。

这是脚本的启动方式: error_reporting(E_ALL); ini_set('display_errors', '1'); error_reporting(E_ALL); ini_set('display_errors', '1'); 除了“不可思议的” Segmentation fault外,没有报告任何错误。 我没有使用APC。

不知道它是否相关,但是我正在使用CLI运行脚本,而不是Web界面。

PHP版本是5.3.8,MySQL版本是5.1.56。 内存限制设置为64MB。

编辑:失败的过程+一些其他代码在这里上传: http : //codepad.org/KkZTxttQ 整个文件庞大且丑陋,我认为这无关紧要,因此我暂时不发布它。 失败的行是113。

自从我解决了问题以来,我对自己问题的回答是没有其他答案了...

值得一提的是@ jap1968,它指向我指向函数mysqli_stmt_error(我假设不需要,因为我有error_reporting(E_ALL) )。

问题是MySQL具有非常奇怪的默认配置:特别是

connect_timeout = 10
wait_timeout = 30

这导致MySQL服务器仅在30秒后关闭连接(根据MySQL网站,默认时间超过半小时)。 反过来,这导致mysqli_stmt_bind_result函数由于分段错误而失败。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM