假设我有这两个变量
$number = 1;
$word = "one";
我想在 pg_query 中使用它们。
这就是我所拥有的:
$result = pg_query($con, 'UPDATE a SET z = ARRAY[{$number}] WHERE word = {pg_escape_literal($word)}');
但它不起作用..
假设我有这两个变量
$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)
)
使用双引号而不是单引号:双引号字符串将变量扩展为它们的值。