准备好的声明存在问题,但未返回任何结果。在检查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代理相关,因为将应用服务器直接连接到数据库服务器可以解决问题。将解决方案一旦确定就会解决。
答案 0 :(得分:0)
尚未确定针对此特定边缘情况的解决方案。然而,离开mysqli
并使用php的PDO
库解决了短期的困境。