存储过程返回我不想要的结果

时间:2013-11-21 09:39:13

标签: mysql node.js stored-procedures node-mysql

我使用node-mysql来调用存储过程,结果包含一些我不想要的模式,如 fieldCount,affectedRows ,如何忽略这些?

当我使用mysql命令调用该过程时,没有这些模式。

过程:

DELIMITER \\
CREATE PROCEDURE QUERY_USER (IN p_name VARCHAR(15))
BEGIN
    SELECT id,name FROM user WHERE name=p_name;
END\\

结果:

[   
    [
    {
      "id": 2,
      "name": "codar"
    },
    {
      "id": 3,
      "name": "codar"
    }   
    ],   
    {
    "fieldCount": 0,
    "affectedRows": 0,
    "insertId": 0,
    "serverStatus": 34,
    "warningCount": 0,
    "message": "",
    "protocol41": true,
    "changedRows": 0   
    } 
]

2 个答案:

答案 0 :(得分:1)

您正在寻找的结果不是您正在查看的数组的成员...它们嵌套在该数组的第一个元素中,该数组本身是另一个数组,在您的示例中只有一个成员,但是如果它有更多的行,它们将是内部数组的成员,而不是外部数组的成员。你需要移动一个级别。

使用存储过程,您希望在元素[0] [0]处找到第一个结果集的第一行,在[0] [1]处找到第二行(如果有的话),第三行(如果有)有一个)在[0] [2] ...等等。结果不在[0]然后[1]然后[2],它们都在一个嵌套在[0]内的数组中。

答案 1 :(得分:0)

是的,如上所述,当你调用一个过程来获取查询结果时,返回集与直接查询不同,它包含一些信息,如fieldCount,affectedRows。 所以你可以在节点代码方面做到这一点,比如:

var GetgroupList_Sql = "call GetActiveGroup(1); ";
mysqlHelper.ExecuteQuery(GetgroupList_Sql,, function (error, result) {
    if (error) {
        res.json({success: false, data: error});
        return;
    }
    console.log(result[0]);
});

主要观点是使用结果[0]而不是正常查询的结果。就是这样:))

参考文档:http://www.sitepoint.com/using-node-mysql-javascript-client/

相关问题