数年前に作成した 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粉7181655402024-01-17 12:42:35
受け取ったエラーは、mysqli 関数 (したがって MySQL コマンド) を順番どおりに実行しようとしていることを意味します。 MySQL は、現時点では予期しないコマンドを受信すると、このエラーを返します。
コードのどこにも free_result()
または close()
を追加しないでください。適切に構造化されたコードには、これらの機能が含まれていてはなりません。これらは、スパゲッティ コードでのメモリ リークを防ぐためだけのものです。
このエラーを修正するには、操作が正しい順序で実行されていることを確認する必要があります。しかし、このコードは複雑すぎて何が起こっているのか理解できません。書き直さなければなりません!
次のような簡単なことを試してください:
リーリー他の関数も同様の方法で削除する必要があります。
実際の問題は、store_result()
を 2 回呼び出していることです。最も簡単な解決策は、そのうちの 1 つを削除することです。しかし、このコードではどれが (存在するとしても) 実際に必要であるかが明確ではないため、どれを削除するかは謎です。おそらく両方を削除できますが、db_num_rows
は機能しません。