2013-11-21 50 views
1

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

当我使用mysql的commend来调用该过程时,没有这些模式。

程序:

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 
    } 
] 

回答

1

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

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

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/