微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP:Postgresql查询中的变量

假设我有这两个变量

$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)
)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐