无法确定 knex.js 和 Postgres 中参数 $1 的数据类型
could not determine data type of parameter $1 in knex.js and Postgres
我在节点上使用 Postgres 9.6.6-alpine 和 Knex.json。
我正在尝试附加到 json 列。
这有效。
const alertBody = encodeURIComponent(JSON.stringify(req.body.alert));
updateMal = await db
.raw(
`UPDATE malware_submissions
SET results_children = COALESCE(results_children, '[]'::jsonb) || '["${alertBody}"]'::jsonb
WHERE request_id=:id
`,
{ id: parentId },
)
.then(() => {
console.log('help');
});
我想让 alertBody 成为另一个参数,但这对我不起作用。
const alertBody = encodeURIComponent(JSON.stringify(req.body.alert));
updateMal = await db
.raw(
`UPDATE malware_submissions
SET results_children = COALESCE(results_children, '[]'::jsonb) || '[":body"]'::jsonb
WHERE request_id=:id
`,
{ body: alertBody, id: parentId },
)
.then(() => {
console.log('help');
});
uh oh undefined
db_1 | ERROR: could not determine data type of parameter
db_1 | STATEMENT: UPDATE malware_submissions
db_1 | SET results_children = COALESCE(results_children, '[]'::jsonb) ||
'[""]'::jsonb
db_1 | WHERE request_id=
db_1 |
api_1 | parent error
我相信这与引文有关,但我不确定要逃避什么。
也许您正在尝试这样做(请注意如何以 sql 注入安全方式对 alertBody 变量字符串进行字符串连接):
await db('malware_submissions')
.update({
results_children: db.raw(
`COALESCE(??, '[]'::jsonb) || ('["' || ? || '"]')::jsonb`,
['results_children', alertBody]
)
})
.where('request_id', parentId);
其他方式是这样的:
await db('malware_submissions')
.update({
results_children: db.raw(
`COALESCE(??, '[]'::jsonb) || ?::jsonb`,
['results_children', `["${alertBody}]"]`]
)
})
.where('request_id', parentId);
我在节点上使用 Postgres 9.6.6-alpine 和 Knex.json。 我正在尝试附加到 json 列。
这有效。
const alertBody = encodeURIComponent(JSON.stringify(req.body.alert));
updateMal = await db
.raw(
`UPDATE malware_submissions
SET results_children = COALESCE(results_children, '[]'::jsonb) || '["${alertBody}"]'::jsonb
WHERE request_id=:id
`,
{ id: parentId },
)
.then(() => {
console.log('help');
});
我想让 alertBody 成为另一个参数,但这对我不起作用。
const alertBody = encodeURIComponent(JSON.stringify(req.body.alert));
updateMal = await db
.raw(
`UPDATE malware_submissions
SET results_children = COALESCE(results_children, '[]'::jsonb) || '[":body"]'::jsonb
WHERE request_id=:id
`,
{ body: alertBody, id: parentId },
)
.then(() => {
console.log('help');
});
uh oh undefined
db_1 | ERROR: could not determine data type of parameter
db_1 | STATEMENT: UPDATE malware_submissions
db_1 | SET results_children = COALESCE(results_children, '[]'::jsonb) ||
'[""]'::jsonb
db_1 | WHERE request_id=
db_1 |
api_1 | parent error
我相信这与引文有关,但我不确定要逃避什么。
也许您正在尝试这样做(请注意如何以 sql 注入安全方式对 alertBody 变量字符串进行字符串连接):
await db('malware_submissions')
.update({
results_children: db.raw(
`COALESCE(??, '[]'::jsonb) || ('["' || ? || '"]')::jsonb`,
['results_children', alertBody]
)
})
.where('request_id', parentId);
其他方式是这样的:
await db('malware_submissions')
.update({
results_children: db.raw(
`COALESCE(??, '[]'::jsonb) || ?::jsonb`,
['results_children', `["${alertBody}]"]`]
)
})
.where('request_id', parentId);