因此,我将 PHP 与 Mysqli 一起使用,并尝试运行一个非常基本的准备好的语句:
$stmt = $mysqli->prepare("SELECT field FROM blubb WHERE id=? AND username=? LIMIT 1");
while($doingStuff){
// Do Stuff
$stmt->bind_param("is", $id, $username);
$stmt->execute();
// Do Stuff
}
但是当我尝试运行执行时出现内部服务器错误。
我已经设置
error_reporting(E_ALL);
ini_set("display_errors", 1);
在我的脚本中,我认为我可能会收到一条错误消息以了解问题所在,但它仍然是内部服务器错误。
我也试过
$stmt->execute() or die("error msg");
但仍然是相同的错误,服务器错误日志中也没有任何内容。我还尝试过将 $id 显式转换为 int,但没有帮助。
我怎样才能调试它并找到错误?我似乎无法从我的脚本中得到正确的错误消息,而且我不知道可能出了什么问题,因为我使用的其他准备好的语句运行良好。
编辑:好的,我刚刚找到了问题的根源,我正在尝试这样做
while($doStuff){
method($stmt1, $stmt2)
}
method($stmt1, $stmt2){
// handle $stmt1
// stuff
// handle $stmt2
}
根据这篇文章http://www.ioncannon.net/programming/889/php-mysqli-and-multiple-prepared-statements/这是不可能的
我通过简单地改变来修复错误
while($doingStuff){
// Do Stuff
$stmt->bind_param("is", $id, $username);
$stmt->execute();
// Do Stuff
}
至
while($doingStuff){
// Do Stuff
$stmt->bind_param("is", $id, $username);
$stmt->execute();
$stmt->store_result();
// Do Stuff
}
在第一个声明上。
但是我仍然想知道如何获取实际错误而不是内部服务器错误,因为我使用的是共享主机,所以我无法更改 php.ini