PG 不会连接大 SQL 字符串
PG won't concatenate large SQL string
我正在使用 Node-Postgres 构建在线登录应用程序。我可以 运行 以下 Postgres 代码使用 PSQL 没问题:
DO $$
BEGIN
IF (SELECT child.child_signedin FROM child WHERE child.child_name = 'mell') IS TRUE THEN
INSERT INTO signin (signin_child_id,signin_child_name,signin_intime)
VALUES (12,mell,'2018-09-24 21:46:06.249+00');
END IF;
END $$
不幸的是,当我尝试使用 Node_Postgres 使其动态化时,出现以下错误:
"error: bind message supplies 3 parameters, but the prepared statement "" requires 0"
这是我的 nodejs 代码:
signinTime = new Date();
let text = "DO $$ BEGIN IF (SELECT child.child_signedin FROM child WHERE child.child_name = ) IS TRUE THEN INSERT INTO signin (signin_child_id,signin_child_name,signin_intime)\
VALUES (,,); END IF; END $$"
let values = [req.body.childName, req.body.childId, signinTime];
pool.query(text, values, (err, response) => {
if (err) {
// console.log(JSON.stringify(err.stack));
console.log(err.stack.split('\n', 1)[0])
}
else {
res.send('complete')
};//end else
})
任何线索将不胜感激。
DO
用于可以用各种语言执行的过程语句,并且不会被 node-postgres 视为有效 SQL。您可以使用一些异步流控制拆分您的语句以获得相同的结果。
示例:
const selectRes = await pool.query('SELECT child.child_signedin FROM child WHERE child.child_name = ', [req.body.childName]);
if (selectRes.rows.length && selectRes.rows[0].child_signedin === true) {
await pool.query(`INSERT INTO signin
(signin_child_id,signin_child_name,signin_intime)
VALUES (,,);`, values);
}
或者创建一个 Postgres 函数并在查询中执行它。
我正在使用 Node-Postgres 构建在线登录应用程序。我可以 运行 以下 Postgres 代码使用 PSQL 没问题:
DO $$
BEGIN
IF (SELECT child.child_signedin FROM child WHERE child.child_name = 'mell') IS TRUE THEN
INSERT INTO signin (signin_child_id,signin_child_name,signin_intime)
VALUES (12,mell,'2018-09-24 21:46:06.249+00');
END IF;
END $$
不幸的是,当我尝试使用 Node_Postgres 使其动态化时,出现以下错误:
"error: bind message supplies 3 parameters, but the prepared statement "" requires 0"
这是我的 nodejs 代码:
signinTime = new Date();
let text = "DO $$ BEGIN IF (SELECT child.child_signedin FROM child WHERE child.child_name = ) IS TRUE THEN INSERT INTO signin (signin_child_id,signin_child_name,signin_intime)\
VALUES (,,); END IF; END $$"
let values = [req.body.childName, req.body.childId, signinTime];
pool.query(text, values, (err, response) => {
if (err) {
// console.log(JSON.stringify(err.stack));
console.log(err.stack.split('\n', 1)[0])
}
else {
res.send('complete')
};//end else
})
任何线索将不胜感激。
DO
用于可以用各种语言执行的过程语句,并且不会被 node-postgres 视为有效 SQL。您可以使用一些异步流控制拆分您的语句以获得相同的结果。
示例:
const selectRes = await pool.query('SELECT child.child_signedin FROM child WHERE child.child_name = ', [req.body.childName]);
if (selectRes.rows.length && selectRes.rows[0].child_signedin === true) {
await pool.query(`INSERT INTO signin
(signin_child_id,signin_child_name,signin_intime)
VALUES (,,);`, values);
}
或者创建一个 Postgres 函数并在查询中执行它。