给mysqld_stmt_execute的未知预处理语句处理程序

时间:2018-03-16 15:56:08

标签: php mysql mysqli prepared-statement netscaler

准备好的声明存在问题,但未返回任何结果。在检查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 个答案:

答案 0 :(得分:0)

尚未确定针对此特定边缘情况的解决方案。然而,离开mysqli并使用php的PDO库解决了短期的困境。