我们使用条令2,并希望编写这样的参数化代码:
attributes @> '{' . $con->quote($attrId) . ':' . (int)$value . '}'';
有这样的查询:
WHERE attributes @>'{"color":14}';
"color"
是属性的自定义(用户选择)名称。所以我觉得quote()
是一个合适的函数来屏蔽它。但它用单引号包装了一个参数,这使得请求语法不正确。
quoteIdentifier()
函数用双引号包装,但我不确定在这种情况下使用它是否正确。
如何构建一个安全的代码来获得我需要的请求
以下是使用json_build_object
和pg_exec_params
:的方法
<?php
$dbconn = pg_connect('');
$data = 'some"th'ing';
pg_query_params($dbconn, 'SELECT json_build_object($1::text, $2::integer)', [$data, 14]);
?>
您需要显式类型转换,以便PostgreSQL知道参数是字符串还是数字。
您可以在字符串中包含双引号。
$attr = '{"' . $attrId . '":' . (int) $value . '}';
不要依赖引用来保证安全,而是使用将值绑定到准备好的语句的方法来执行查询。
$statement = $con->executeQuery('SELECT * FROM your_table WHERE attributes @> ?', [$attr]);