3

我正在尝试使用node-mysql运行一个简单的查询,如下所示:

client.query("UPDATE mytable SET emote='wtf?' WHERE id=5");

我得到了错误

错误:给定的参数太少

因为它找到了一个问号并期望参数。我怎么告诉它忽略问号!?逃避它\是行不通的。['?']作为参数传递是完全不可能的——如果我不知道查询包含的问号数量怎么办?

目前我正在使用一种解决方法来计算查询中的问号数量并将该数量的问号作为参数传递。但是,如果我真的需要这些参数来完成它们的用途呢?我一想到就发抖。

所以总结一下 - 我如何告诉client.query()忽略问号?

4

3 回答 3

2

用这个:

client.query('UPDATE mytable SET emote=? WHERE id=5', ['wtf?']);

编辑:

将 ['?'] 作为参数传递是完全不可能的 - 如果我不知道查询包含的问号数量怎么办?

我跳过了这个。为什么您不知道查询包含多少问号?为什么会有一个带有问号的未知查询?

于 2012-02-20T13:14:00.163 回答
1

这是一个未解决的错误:#118: Client.prototype.format 不应该处理“?” 作为字符串文字中的占位符

于 2012-02-20T10:52:59.350 回答
0

当我尝试重新创建您的场景时,重复使用单引号会导致问题:

client.query('UPDATE mytable SET emote='wtf?' WHERE id=5');

具体来说,当我尝试启动 Node 实例时,我看到了“SyntaxError: Unexpected identifier”。

但是,当我将外引号切换为双引号时,我可以很好地运行等效查询,如下所示:

mysql.query("SELECT * FROM stories WHERE title='Test?'");

为了比较,这是我的查询的参数化版本:

mysql.query('SELECT * FROM stories WHERE title=?',[req.params.title]);
于 2012-03-22T05:11:08.080 回答