2017-07-03 89 views
0

我是超级新手postgres并试图做一个简单的选择查询。选择查询postgreqs在nodejs上失败

我的表如下所示:

create table push_table 
(
    seq_id int, 
    device_id text, 
    primary key (seq_id), 
    user_id varchar(100) 
); 

和我的NodeJS代码如下:

pool.connect(function (err, client, done) 
    { 
    if (err) console.log(err) 
    myClient = client 

    //query if the user exists 
    var ageQuery = format('SELECT * from push_table WHERE user_id = ' + userId); 
    myClient.query(ageQuery, function (err, result) { 
     if (err) { 
      console.log(err) 
     } 
     console.log("number of rows:" + result.rows.length); 
    }); 
    }); 

上运行nodejs服务器日志打印:

{ [error: missing FROM-clause entry for table "catherine"] 
    name: 'error', 
    length: 113, 
    severity: 'ERROR', 
    code: '42P01', 
    detail: undefined, 
    hint: undefined, 
    position: '42', 
    internalPosition: undefined, 
    internalQuery: undefined, 
    where: undefined, 
    schema: undefined, 
    table: undefined, 
    column: undefined, 
    dataType: undefined, 
    constraint: undefined, 
    file: 'parse_relation.c', 
    line: '3129', 
    routine: 'errorMissingRTE' } 
/data/OSC_Push_OOW/releases/20170703215021/api/controllers/pushcontroller.js:58 
          console.log("number of rows:" + result.rows.length); 
                   ^

TypeError: Cannot read property 'rows' of undefined 
    at null.callback (/data/OSC_Push_OOW/releases/20170703215021/api/controllers/pushcontroller.js:58:46) 
    at Query.handleError (/data/OSC_Push_OOW/shared/node_modules/pg/lib/query.js:161:17) 
    at null.<anonymous> (/data/OSC_Push_OOW/shared/node_modules/pg/lib/client.js:188:26) 
    at emitOne (events.js:77:13) 
    at emit (events.js:169:7) 
    at Socket.<anonymous> (/data/OSC_Push_OOW/shared/node_modules/pg/lib/connection.js:133:12) 
    at emitOne (events.js:77:13) 
    at Socket.emit (events.js:169:7) 
    at readableAddChunk (_stream_readable.js:153:18) 
    at Socket.Readable.push (_stream_readable.js:111:10) 
+1

当发生这种情况时,你可以记录'userId'的值吗?可能你正在进行某种SQL注入? – joanolo

+1

以及我不得不修改并添加明确的报价,使其工作。所以你的反馈肯定帮助我 – Vik

回答

1

列user_id是VARCHAR:

user_id varchar(100) 

这样一个有效的SQL查询必须使用单引号来定义VARCHAR值,例如:

SELECT * from push_table WHERE user_id = 'Vik' 

您的代码不提供所需的报价。

+0

是啊想出来,但为其他人的好处标记为答案 – Vik