gpt4 book ai didi

执行存储过程时 PHP Apache 崩溃

转载 作者:行者123 更新时间:2023-12-05 07:51:33 26 4
gpt4 key购买 nike

问题

当我执行以下代码时(我正在调用一个带有 5 个 IN 参数和 1 个 OUT 参数的存储过程)

$conn->query("SET @res = ''");

$mysqli=$conn;
if (!($stmt = $mysqli->prepare("CALL retrieve_matches(5,3, 16, 2, false, @res)"))) {
echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
}

if (!$stmt->execute()) {
echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
}

do {
if ($res = $stmt->get_result()) { //Apache crash on this call
printf("---\n");
var_dump(mysqli_fetch_all($res));
mysqli_free_result($res);
} else {
if ($stmt->errno) {
echo "Store failed: (" . $stmt->errno . ") " . $stmt->error;
}
}
} while ($stmt->more_results() && $stmt->next_result());

apache 因错误而崩溃:

AH00428: Parent: child process 9628 exited with status 255 -- Restarting.

我尝试了什么

  1. 此代码运行良好,并正确返回结果:
$conn->query("SET @res = ''");
$res=$conn->query("CALL retrieve_matches(5,3, 16, 2, false, @res)");
var_dump($res->fetch_assoc());

注意:如果我只是更改存储过程输入中的数字,则上面导致 Apache 崩溃的相同代码可以正常工作,例如:

if (!($stmt = $mysqli->prepare("CALL retrieve_matches(5,6, 16, 2, false, @res)"))) {
  1. 从 MySQl workbench 试过,两个调用都工作正常。
  2. 我在 WIN7 Enterprise 64b 上使用 WAMP 64b,我尝试使用 WAMP 32b 但遇到了同样的问题。
  3. 我检查了 Windows 事件,发现 httpd.exe 崩溃是由 php5ts.dll 引起的
  4. 如果您在谷歌上搜索“httpd.exe php5ts.dll”,您会发现很多人都在遇到这个问题。但是我没有找到 WAMP 的解决方案...
  5. 尝试过使用 AMPPS,问题完全相同

PHP 错误日志

[10-Jul-2015 15:30:03 UTC] PHP Warning:  PHP Startup: Unable to load dynamic library 'C:/Program Files/wamp/bin/php/php5.5.12/ext/php_ldap.dll' - Impossibile trovare il modulo specificato.

in Unknown on line 0

[10-Jul-2015 15:30:04 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'C:/Program Files/wamp/bin/php/php5.5.12/ext/php_intl.dll' - Impossibile trovare il modulo specificato.

APACHE 错误日志:

[Tue Jul 14 15:02:13.038276 2015] [mpm_winnt:notice] [pid 7044:tid 404] AH00428: Parent: child process 9448 exited with status 255 -- Restarting.
[Tue Jul 14 15:02:13.324305 2015] [mpm_winnt:notice] [pid 7044:tid 404] AH00455: Apache/2.4.9 (Win32) PHP/5.5.12 configured -- resuming normal operations
[Tue Jul 14 15:02:13.329306 2015] [mpm_winnt:notice] [pid 7044:tid 404] AH00456: Apache Lounge VC11 Server built: Mar 16 2014 12:13:13
[Tue Jul 14 15:02:13.329306 2015] [core:notice] [pid 7044:tid 404] AH00094: Command line: 'C:\\Program Files\\wamp\\bin\\apache\\apache2.4.9\\bin\\httpd.exe -d C:/Program Files/wamp/bin/apache/apache2.4.9'
[Tue Jul 14 15:02:13.352308 2015] [mpm_winnt:notice] [pid 7044:tid 404] AH00418: Parent: Created child process 3140
[Tue Jul 14 15:02:14.528388 2015] [mpm_winnt:notice] [pid 3140:tid 332] AH00354: Child: Starting 64 worker threads.

我真的迷路了,我应该在哪里寻找问题?非常感谢您的帮助

编辑

我意识到存储过程“retrieve_matches”正在根据更改的值调用不同的存储过程。我调试了导致 Apache 崩溃的存储过程“retrieve_standalone”。此过程正在执行选择/插入,我检查并正确插入。但是在“retrieve_standalone”中我以一种奇怪的方式使用游标:

declare bNoMoreRows bool default false;
declare tmp_cursor cursor for
select comp_id from to_match; -- to_match is a temporary table
declare continue handler for not found set bNoMoreRows := true;

如果我不打开光标

open tmp_cursor;

一切正常!!所以我想我现在发现了问题:我该如何解决它?

最佳答案

如果每次运行短脚本时 php5ts.dll 或 apache 的任何其他部分都以可重现的方式崩溃,那么您很可能遇到了 php 中的错误。特别是如果您运行最新的 apache 并使用从 php.net 下载的最新 php 版本,您很有可能获得 PHP 团队的支持。所以通读https://bugs.php.net/how-to-report.php ,看看在没有 apache 的情况下运行脚本时是否可以重现崩溃(在 cli 上使用 php.exe 的单独脚本中)和 generate a backtrace然后您可以将其作为错误提交。

像这样的错误有时可以解决,但很少能从脚本的上下文中修复。 PHP 不应该使网络服务器崩溃,如果它重复出现这种情况,则应提交错误以便修复

关于执行存储过程时 PHP Apache 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34856072/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com