转义文字,使其用双引号引起来

时间:2019-01-24 18:54:59

标签: php postgresql doctrine-orm doctrine doctrine-orm-postgres

我们使用准则2,并希望编写这样的参数化代码:

attributes @> \'{' . $con->quote($attrId) . ':' . (int)$value . '}\'';

具有这样的查询:

WHERE attributes @>'{"color":14}';

"color"是属性的自定义(用户选择)名称。因此,我认为quote()是屏蔽它的适当功能。但是它将参数用单引号引起来,这使请求语法不正确。

quoteIdentifier()函数用双引号引起来,但是我不确定在这种情况下使用它是否正确。

如何构建安全代码来获取我需要的请求?

2 个答案:

答案 0 :(得分:1)

这是使用json_build_objectpg_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知道参数是字符串还是数字。

答案 1 :(得分:0)

您可以在字符串中包括双引号。

$attr = '{"' . $attrId . '":' . (int) $value . '}';

不要依赖引用来确保您的安全,而是使用将值绑定到准备好的语句的方法来执行查询。

$statement = $con->executeQuery('SELECT * FROM your_table WHERE attributes @> ?', [$attr]);