これらの2つの変数があるとしましょう
$number = 1;
$word = "one";
そして、それらをpg_queryで使用したいと思います。
これは私が持っているものです:
$result = pg_query($con, 'UPDATE a SET z = ARRAY[{$number}] WHERE word = {pg_escape_literal($word)}');
しかし、それは機能しません。
これらの2つの変数があるとしましょう
$number = 1;
$word = "one";
そして、それらをpg_queryで使用したいと思います。
これは私が持っているものです:
$result = pg_query($con, 'UPDATE a SET z = ARRAY[{$number}] WHERE word = {pg_escape_literal($word)}');
しかし、それは機能しません。
文字列補間を使用するには、二重引用符を使用する必要があります。
$x = 3;
"This works: $x" // This works: 3
'This does not: $x'; // This does not: $x
また、で試みているように、関数呼び出しを文字列に補間することはできません{pg_escape_literal($word)}
。文字列に補間する前に、変数をエスケープする必要があります。
$word_esc = pg_escape_literal($word);
$result = pg_query(
$con,
"UPDATE a SET z = ARRAY[$number] WHERE word = $word_esc"
);
また、使用することができますsprintf
:
$result = pg_query(
$con,
sprintf(
"update a set z=ARRAY[%d] where word = %s",
$number,
pg_escape_literal($word)
)
);
pg_query_params
ただし、パラメータをエスケープしないため、関数を使用するのが最も安全です。また、サイトを忘れてSQLインジェクション攻撃にさらすのは非常に簡単です。
$result = pg_query_params(
'update a set z=ARRAY[$1] where word = $2',
array($number,$word)
)
一重引用符の代わりに二重引用符を使用します。二重引用符で囲まれた文字列は、変数を値に展開します。