1

从昨晚开始,我就一直在用这个敲我的头。当我向 sql 添加参数时,它不起作用。

var findOne = function(username, cb) {
    pg.connect(pgURL, function(err, client, done) {
        var query = client.query('SELECT * FROM users WHERE username = $1', [username]);
        done();

        query.on('row', function(row) {
            cb(err, row);
        });
    });
};

但是,如果我在没有参数化的情况下执行 SQL 语句,它就可以正常工作。

var query = client.query("SELECT * FROM users WHERE username = 'foobar'");

此外,在 done() 之后执行 console.log(query) 会产生以下结果:

13:48:00 web.1  | { domain: null,
13:48:00 web.1  |   _events: null,
13:48:00 web.1  |   _maxListeners: 10,
13:48:00 web.1  |   name: undefined,
13:48:00 web.1  |   text: 'SELECT * FROM users WHERE username = $1',
13:48:00 web.1  |   values: [ '{"username":"foobar"}' ],
13:48:00 web.1  |   callback: undefined,
13:48:00 web.1  |   _result: 
13:48:00 web.1  |    { command: null,
13:48:00 web.1  |      rowCount: null,
13:48:00 web.1  |      oid: null,
13:48:00 web.1  |      rows: [],
13:48:00 web.1  |      fields: [],
13:48:00 web.1  |      _parsers: [],
13:48:00 web.1  |      RowCtor: null },
13:48:00 web.1  |   _addedFields: false,
13:48:00 web.1  |   _canceledDueToError: false }

我在这里做错了什么?

4

2 回答 2

1

您的用户名变量似乎是一个带有键用户名和值 foobar 的 Javascript 对象。尝试username.username仅引用该值。

或者,我强烈推荐位于 pg 之上的 ORM Sequelize。看看这里:http ://sequelizejs.com/documentation#usage-raw-queries

于 2013-09-15T21:25:57.803 回答
0

你确定用户名是一个字符串吗?尝试做username.toString()

于 2013-09-15T19:47:44.523 回答