ホームページ  >  に質問  >  本文

古い PHP バージョンから php8.2.5 に更新すると、「Uncaught mysqli_sql_Exception: コマンドが同期していません。現在このコマンドを実行できません」というメッセージが表示される

数年前に作成した PHP 5 用の mysqli ラッパーがありますが、それを PHP 8.2.5 で実行しようとするとエラーが発生します。すべて試してみました。主な機能は次の 2 つです:

リーリー

行を取得するには、標準クエリを使用して実行できます。

リーリー

store_result() を含む行 (db_fetch 関数内) で次のエラーが発生します:

mysqli_sql_Exception がキャッチされません: コマンドが同期していません。このコマンドは現在実行できません

コードのさまざまな部分に $stmt->free_result()$stmt->close() を追加するなど、ほぼすべてのことを試しました。

問題は、私が特に $stmt->free_request() または $stmt->close() を使用してこのコード スニペットを書き直す手助けを求めているため、コードの変更は最小限で済むことです。が発生する場合は、できるだけそのままにしておきます。これらは db_query 関数と db_fetch 関数のどこに置かれますか?

P粉883278265P粉883278265277日前513

全員に返信(1)返信します

  • P粉718165540

    P粉7181655402024-01-17 12:42:35

    受け取ったエラーは、mysqli 関数 (したがって MySQL コマンド) を順番どおりに実行しようとしていることを意味します。 MySQL は、現時点では予期しないコマンドを受信すると、このエラーを返します。

    コードのどこにも free_result() または close() を追加しないでください。適切に構造化されたコードには、これらの機能が含まれていてはなりません。これらは、スパゲッティ コードでのメモリ リークを防ぐためだけのものです。

    このエラーを修正するには、操作が正しい順序で実行されていることを確認する必要があります。しかし、このコードは複雑すぎて何が起こっているのか理解できません。書き直さなければなりません!

    次のような簡単なことを試してください:

    リーリー

    他の関数も同様の方法で削除する必要があります。

    実際の問題は、store_result() を 2 回呼び出していることです。最も簡単な解決策は、そのうちの 1 つを削除することです。しかし、このコードではどれが (存在するとしても) 実際に必要であるかが明確ではないため、どれを削除するかは謎です。おそらく両方を削除できますが、db_num_rows は機能しません。

    返事
    0
  • キャンセル返事