Неизвестный подготовленный обработчик операторов передан mysqld_stmt_execute
Возникла проблема с подготовленным заявлением, при котором результаты не возвращаются Изучив общий журнал запросов 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, поскольку подключение сервера приложений напрямую к серверу базы данных решает проблему. Опубликуем решение, когда причина определена.
1 ответ
Решение для этого конкретного случая еще не было найдено. Однако отходя от mysqli
и с помощью PHP PDO
Библиотека разрешила дилемму за короткий срок.