预准备语句未返回任何结果时出现问题。在检查MySql的一般查询日志时,我可以看到连接的位置,但似乎从未执行过查询。
添加 mysqli_report(MYSQLI_REPORT_ALL)
后,将返回以下错误消息:
Unknown prepared statement handler (4) given to mysqld_stmt_execute
以下是执行预准备语句的代码:
$something_in = 'a-string-of-text';
if($stmt = $this->prepare("SELECT first, last, phone FROM people WHERE something=? ORDER BY last ASC")){
try{
if (!$stmt->bind_param('s', $something_in)) {
die('bind_param() failed: ' . htmlspecialchars($stmt->error));
}
$stmt->execute();
$stmt->bind_result($first, $last, $something, $phone);
while($stmt->fetch()){
$returnArray[] = array(
'first_name' => $first,
'last_name' => $last,
'something' => $something,
'phone' => $phone
);
}
$stmt->free_result();
$stmt->close();
return $returnArray; // we make it to here with a blank array instead of expected results
} catch (Exception $ex) {
return $ex->getMessage();
}
}
还有其他人遇到过这个问题吗?这似乎很奇怪。
MySQL 版本:5.6
PHP 版本: 7
另一个有用的信息是,我们正在使用netscaler,它充当应用程序服务器和数据库服务器之间的代理。我倾向于相信这可能是挂断发生的地方。
编辑
确认这与我们的 netscaler 代理有关,因为将应用程序服务器直接连接到数据库服务器可以解决问题。一旦确定原因,将发布解决方案。
尚未确定此特定边缘情况的解决方案。然而,摆脱mysqli
并使用php的PDO
库已经解决了短期内的困境。