【问题标题】:Node-mysql not working properly... need debug ideasNode-mysql 无法正常工作...需要调试思路
【发布时间】:2014-04-05 06:03:52
【问题描述】:

我是第一次使用node-mysql,我有一个程序没有错误,没有警告,但是不能正常工作......这是程序的代码,很简单:

var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : '',
  database:  'nodetest',
  port: 8080
});

connection.connect();
var usr = "BLASHDASD"
var userId = usr;
var sql = 'UPDATE userlist SET user1= ' + connection.escape(userId) + ' WHERE id=1 ';
console.log(sql);

connection.query('sql', function(err, rows, fields) {
  console.log(err);
  console.log("BLAHSDBKASD");
});

connection.end();

这是控制台输出:

C:\wamp\www\nodePHP-master\js>node nodeTest.js
UPDATE userlist SET user1= 'BLASHDASD' WHERE id=1

但是我的 MySQL 表中什么都没有发生...我什至复制并粘贴了上面的 UPDATE 行,然后将其作为 SQL 代码运行,它运行良好...需要一些关于正在发生的事情的想法。非常感谢

编辑:

回答了我自己的问题...正在侦听错误的端口,因此连接失败。下面是更新后的代码供有兴趣/搜索的人参考:

//TEST

var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : '',
  database:  'nodetest',
  port: 3306,
});

connection.connect(function(err){
    if(err) {
        console.log(err)
    } else {
        console.log("connected");
    }
});
var usr = "BLASHDASD"
var userId = usr;
var sql = 'UPDATE userlist SET user1= ' + connection.escape(userId) + ' WHERE id=1 ';
console.log(sql);

connection.query(sql, function(err, rows, fields) {
  console.log(err);
});

connection.end();

【问题讨论】:

  • 请看下面我的回答。如果您的代码按照编写的方式工作,那么您在时间上会非常幸运。使用“选择”查询对远程数据库进行尝试,看看是否有任何结果要读取。

标签: mysql node.js debugging socket.io


【解决方案1】:

您遇到了 node 的异步特性问题,这是使用 Node.js 时非常常见的问题。您的代码中还有一个小但重要的错误(您将 'sql' 作为引号字符串),但这里有一些结构相似的内容,应该为您指明正确的方向。

var mysql      = require('mysql');
var connection = mysql.createConnection({
    host     : 'locahost',
    user     : 'foo',
    password : 'bar',
    database : 'test'
});

// the callback inside connect is called when the connection is good
connection.connect(function(err){
    var sql = "select 'Joe' as name from dual";

    connection.query(sql, function(err, rows, fields) {
        if (err) return console.log(err);
        //  you need to end your connection inside here.
        connection.end();
        console.log(rows[0].name);
    });
});

您可能会开始想知道如何避免所有这些回调。您可能希望查看我对this question 的回答,以获得更扩展的 mysql 示例以及提供回调狂热的替代方案的替代实现。

【讨论】:

  • 捕获'sql'错误谢谢!想通了,但通读了你的帖子和你链接的问题......欣赏它!
  • 不客气。我很想知道拒绝投票的人的原因??
  • @barry-johnson 我喜欢你的回答。我会赞成它来弥补你! :D
  • @RaviShankarBharti LOL - 谢谢,你是王子!尽管我不得不说这是一个非常过时的答案(尽管就它而言是正确的)。讨论基于 Promise 的实现的链接问题不太好,因为我倾向于推荐 Bluebird,或者通常只是原生 Promise 而不是 Q。
  • @barry-johnson 即使过时了,答案即使现在也有效!对我来说看起来不错!没有必要投反对票!我不知道那个人在想什么:D这就是我选择投票的原因:D
猜你喜欢
  • 2013-05-03
  • 2015-05-06
  • 1970-01-01
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多