我在存储带有单引号文本的jason值时遇到问题。
以下是该方案,
我的存储过程:
CREATE OR REPLACE FUNCTION JsonParse(inputdata json)
RETURNS void AS $$
DECLARE
BEGIN
UPDATE
MyTable
SET
settings_details= inputdata
WHERE
settings_key='my-list';
END;
$$
LANGUAGE PLPGSQL;
select * from JsonParse('[{
"myArray": ["New Text1 ''abcd''", "New Text1 ''abcd''"]
},
{"myArray": ["New Text1 ''abcd''", "New Text1 ''abcd''"]}]');
我收到以下错误: 错误:“abcd”或附近的语法错误
我可以为abcd和efgh添加额外的单引号。它解决了这个问题。但问题是我没有对JsonParse过程的输入文本进行控制。 存储过程应该足以处理这个问题。
请知道如何解决这个问题
答案 0 :(得分:0)
您的存储过程并未拒绝此操作,您正在运行的SQL格式不正确。
尝试一个更简单的例子:
SELECT 'test o'reilly' AS FOO;
正如语法高亮显示的那样,SQL解析器会认为字符串是'test o'
,而reilly
是语法错误。
这表明您没有正确处理SQL查询中的数据输入,并且可能容易受到SQL注入攻击(如果我向您提供" JSON"字符串{}'); DROP TABLE users; --
)。
Everywhere 您将数据添加到SQL查询中,您需要执行以下两项操作之一:
select * from JsonParse(?);
,其中execute函数采用一个参数。