我有一个简单的桌子:
CREATE TABLE items (
id SERIAL PRIMARY KEY,
name VARCHAR (50) UNIQUE NOT NULL,
price decimal NOT NULL
);
INSERT INTO items (name, price)
VALUES
('sprocket1-2a', 50.0),
('bolt-2x', 39.10),
('nut2-7a', 88.50);
使用 Drizzle,我尝试执行原始 SQL 查询,例如
db.execute(
sql`SELECT * FROM items WHERE name ILIKE '%${search}%'`,
),
但我收到错误
Error: could not determine data type of parameter $1
我知道我能做到
${sql.raw(search)}
为了解决这个问题,但我不想这样做,因为“搜索”将来自用户。我如何在这里安全地接受用户输入?
你应该创建这样的东西:
const preparedSearch = `%${search}%`;
db.execute(
sql`SELECT * FROM items WHERE name ILIKE ${preparedSearch}`,
);