1

假设我有这两个变量

$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 回答