1

これらの2つの変数があるとしましょう

$number = 1;
$word = "one";

そして、それらをpg_queryで使用したいと思います。

これは私が持っているものです:

$result = pg_query($con, 'UPDATE a SET z = ARRAY[{$number}] WHERE word = {pg_escape_literal($word)}');

しかし、それは機能しません。

4

2 に答える 2

2

文字列補間を使用するには、二重引用符を使用する必要があります。

 $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)
)
于 2012-06-14T17:52:27.797 に答える
0

一重引用符の代わりに二重引用符を使用します。二重引用符で囲まれた文字列は、変数を値に展開します

于 2012-06-14T17:51:50.107 に答える