我正在尝试对vertica数据库执行sql查询。到目前为止还有效但是为了防止SQL注入,我想使用参数化查询。看起来vertica支持的参数为?
(与postgres的$1, $2, ...
相比)
所以参数工作,但如果参数是一个值数组,则不工作(用于IN (...)
条件)
- 任何想法如何解决这个问题?*
假设我有一个用户ID列表和一个名称:
const userIds = [1, 2, 3];
const name = 'robert'
postgres db(工作中!)
使用pg
包:
const pool = new pg.Pool({ /* config */ });
const client = await pool.connect();
const { rows } = client.query(`
SELECT * FROM users WHERE first_name = $1 AND user_id = ANY($2);
`, [name, userIds]);
使用postgres
:
const sql = postgres({ /* postgres db config */ });
const rows = await sql`
SELECT * FROM users WHERE first_name = ${name} AND user_id = ANY(${userIds});
`;
vertica db(无法工作)
仅当userIds
作为单个值传递时有效,而不是1+值的数组
使用vertica-nodejs
:
import Vertica from 'vertica-nodejs';
const { Pool } = Vertica;
const pool = new Pool({ /* vertica db config */ });
const res = await pool.query(`
SELECT * FROM users WHERE first_name = ? AND user_id IN (?);
`, [name, userIds]);
// -> Invalid input syntax for integer: "{"1","2","3"}"
使用vertica
:
似乎根本不支持参数,只是提供了一个函数(quote
)来在字符串插值之前清理它们。
使用pg
:
const pool = new pg.Pool({ /* vertica db config */ });
const client = await pool.connect();
const { rows } = client.query(`
SELECT * FROM users WHERE first_name = ? AND user_id IN (?);
`, [name, userIds]);
// -> Invalid input syntax for integer: "{"1","2","3"}"
使用postgres
:
(似乎根本不支持连接到vertica db)
const sql = postgres({ /* vertica db config */ });
const rows = await sql`
SELECT * FROM users;
`;
// -> Schema "pg_catalog" does not exist
我也尝试了这些变体而不是user_id IN (?)
:
user_id IN (?::int[])
->操作员不存在:int = array[int]- 您访问的页面不存在
- 您访问的页面不存在
1条答案
按热度按时间ct2axkht1#
试试
ANY (ARRAY [$1])
我不知道node.js
或SQL注入,但在bash shell中似乎可以工作: