PHP:Postgresql查询中的变量

时间:2012-06-14 17:50:00

标签: php postgresql

假设我有这两个变量

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

我希望在pg_query中使用它们。

这就是我所拥有的:

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

但它不起作用..

2 个答案:

答案 0 :(得分: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)
)

答案 1 :(得分:0)

使用double而不是单引号:双引号字符串expand variables into their values