mysql - 执行更新时出错

标签 mysql node.js

我在使用 Node mysql2 模块执行更新查询时遇到了一些麻烦。我正在使用“?”准备查询占位符,然后像这样传递值;

socket.on('connection', function(client){
    [...]
    client.on('userjoin', function(username, userid){
        run_db_insert("UPDATE users_table SET clientid = ? WHERE user = ?", [client.id, userid], function(){
            console.log(client.id + ' <=> ' + userid);
        });
    [...]
});

不幸的是,这引发了一个错误; 您的 SQL 语法有误;检查与您的 MySQL 服务器版本相对应的手册,了解在“12345678”附近使用的正确语法 WHERE userid = ?'在第 1 行

数据未反射(reflect)在数据库中。出于某种原因,代码似乎没有选择第二个问号占位符,因此它没有传递正确的值(即它试图找到 userid?).

如果我把代码改成这样;

run_db_insert("UPDATE users_table SET clientid = ? WHERE user = '" + userid + "'", [client.id], function(){

...然后更新运行无误并反射(reflect)在数据库中。如果我 console.log client.iduserid,控制台会正确反射(reflect)这些值。

我的run_db_insert函数如下;

function run_db_insert(sql, args, callback){
    var mysql = svc_mysql2.createConnection({
        // connection details
    });
    mysql.connect(function(err){
        if(err){
            console.log('Error connecting to DB: ' + err);
        }
    });

    mysql.query(sql, [args], function(err){
        if (err){
            console.log(err);
            return;
        }
        callback();
    });
    mysql.end();
};

我在使用多个“?”执行 SELECT 或 INSERT 查询时没有遇到任何问题占位符(在该函数的第 11 行中具有 result 的稍微修改的函数,然后在回调中返回它),但我发现 UPDATE 没有正确分配我的所有参数我传递给它。

最佳答案

我认为你的问题是你将查询替换值包装在另一个数组中,所以 [[client.id, userid]] 被传递给 mysql.query()

尝试改变:

mysql.query(sql, [args], function(err){

到:

mysql.query(sql, args, function(err){

关于mysql - 执行更新时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24106747/

相关文章:

java - hibernate.cfg.xml 包含有关 MySQL 数据库的信息,它们为什么会出现此异常?

php - MySQL 说字段不存在但确实存在

php - 用于数据库和网络安全的 preg_replace 函数

javascript - 通用函数中的特定变量名称 - Node.js

node.js - 如何应用程序使用来自不同文件的所有路由

mysql - 找不到 phpmyadmin.conf 允许 IP 访问

java - 教程第 6 部分中出现错误 : JSON Parsing and Android ListView Design

php - mySQL 语句 ORDER BY 多列

node.js - 如何在nodejs中独立使用模块的子模块

regex - 如何在 Express.js 中创建 "does not begin with..."正则表达式?