假设我有这两个变量
$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] 举报,一经查实,本站将立刻删除。