2

結果が返されない準備済みステートメントに問題があります。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

もう 1 つの有用な情報は、アプリ サーバーとデータベース サーバーの間のプロキシとして機能するネットスケーラーを使用していることです。これがハングアップが発生している場所であると信じる傾向があります。

編集

アプリ サーバーを直接 db サーバーに接続すると問題が解決するため、これは netscaler プロキシに関連していることを確認しました。原因が特定されたら、解決策を投稿します。

4

1 に答える 1

0

この特定のエッジ ケースの解決策はまだ特定されていません。mysqliしかし、php のライブラリから離れて使用PDOすることで、短期的にはジレンマが解決されました。

于 2018-03-21T20:00:40.857 に答える