2017-07-16 7 views
0

PHPでPDOクラスを使用してPostgreSQLクエリを実行しています。PHP Postgres PDOの一重引用符

$conn = new PDO("pgsql:host=$dbhost;port=$dbport;dbname=$dbname;user=$dbuser;password=$dbpass"); 
$query = 'SELECT "ID", "Description" FROM "MyTable"'; 
$result = $conn->query($query); 

クエリで何かがこれはそれがあるように動作しません

$query = 'SELECT "ID", "Description" FROM "MyTable" WHERE "Description" = 'A107''; 

のような単一引用符で囲む必要があると仮定します。しかし、私が次のことをすれば、うまくいくでしょう。

$query = 'SELECT "ID", "Description" FROM "MyTable" WHERE "Description" = ' . $conn->quote('A107', PDO::PARAM_STR); 

私はPDOの準備と実行でこれを行うより良い方法があることを知っています。このコードは本質的に私の同僚(プログラミング経験が限られている)がPostgreSQLのクエリを貼り付けることを望むテンプレートの一部です。

このように、私はこの場合、一重引用符を扱う最も簡単な方法を探しています。クエリは、私が与えた例よりも複雑かもしれませんし、テンプレートをあまりにも使いすぎないようにしたくありません。エスケープのラインに沿った何かがいいだろうが、これは動作するようなものは見つかりませんでした。彼らの一部の修正が必要になるだろうが、これを最小限に抑えたいと思う。

+2

一重引用符をエスケープすることができます。 '\'を使用してください。 –

答えて

0

コード自体をエスケープすることなくPHPコードにクエリを貼りたい場合は、 'heredoc'または 'nowdoc'を使用できます。 php strings documentationを参照してください。

文字列の前後にユニークなタグを使用して開始と終了を識別します。終了識別子は、行の先頭になければならないことに注意してください。

$query = <<<'a_unique_string' 
select * from foo where bar = 'baz' 
a_unique_string; 
+0

これはうまくいきました。ありがとう。 – COM

関連する問題