【问题标题】:node-mysql query attempts to replace my question marks with parameters against my willnode-mysql 查询试图违背我的意愿用参数替换我的问号
【发布时间】:2012-03-10 15:15:08
【问题描述】:

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

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

我得到了错误

错误:给定的参数太少

因为它找到了一个问号并需要参数。我怎么告诉它忽略问号!?用\ 转义它不起作用。将 ['?'] 作为参数传递是完全不可能的 - 如果我不知道查询包含的问号数量怎么办?

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

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

【问题讨论】:

    标签: node.js node-mysql


    【解决方案1】:

    使用这个:

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

    编辑:

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

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

    【讨论】:

    • 查询是预先准备好的(不在节点中),所以查询中的问号数量是完全可变的。
    【解决方案2】:
    【解决方案3】:

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

    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]);
    

    【讨论】:

    • 这是我的问题中的一个错字,抱歉。现已修复
    猜你喜欢
    • 1970-01-01
    • 2017-04-22
    • 2018-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多