編集: ダニエルとデニスの両方に感謝します。問題は現在解決されており、彼らが巧妙に指摘したように、この場合の問題はプログラマーでした (具体的には最後まで考えていませんでした)。両方を答えとして受け入れることができればいいのにと思います。
注: 私が postgresql の初心者であると言うのは、初心者を侮辱することです!
データ ストレージに PostgreSQL データベースを利用する Web アプリを作成しています。これまでの作業で、検索、削除、挿入、更新のいずれであっても、クエリを作成し、クエリから結果を取得するための構文を十分に理解できました。しかし、私は 1 つの困惑に遭遇しました。
SQL インジェクションの問題を回避するには、pg_prepare()/pg_execute()
またはの使用をpg_query_params
お勧めします。私はpg_prepare()/pg_execute()
他のものよりも多くを使用しています。ただし、各クエリは 4 ステップのプロセスです。
- クエリ文字列自体を準備し、
- データベースでクエリを準備する (pg_prepare を使用)
- クエリを実行します (pg_execute)
- 返されたデータを処理/操作します。
これは PHP スクリプトであるため、準備されたクエリはスクリプトの終了時に自動的に割り当て解除されないため、次のような呼び出しを介して手動で行う必要があります。
pg_query($dbconn, "DEALLOCATE 'query_name';")
ただし、DEALLOCATE
SQL コマンドは成功または失敗に関する有用な情報を返さないため、DEALLOCATE
命令の結果を判断しようとすると、次のことを判断するのが面倒になります。
- クエリは成功し、割り当て解除も成功しました
- クエリは成功し、割り当て解除は失敗しました
- クエリが失敗し、割り当て解除も失敗しました
- クエリは失敗し、割り当て解除は成功しました (これが起こるとは思えません)
私の質問は2つあります」
- 割り当て解除が成功したかどうかをどのように判断できますか (割り当て解除されたクエリに関するサーバーへの繰り返しのクエリを除く)。
- クエリのどの部分が失敗したか (失敗した場合)、割り当て解除、またはクエリ自体の送信を判断する簡単な方法はありますか?
この質問は部分的な解決策を提供しますが、エラーのソースを見つけるのには役立ちません. PHP/PostgreSQL: 準備済みステートメントが既に存在するかどうかを確認します