用节点收集mysql查询

时间:2014-09-12 14:28:37

标签: mysql node.js

我刚刚开始使用Node.js而且我很困惑如何用节点收集数据库查询的结果。

如果我们考虑在PHP中如何工作,我们有类似的东西:

(after setting the connection $connection)
$query="select field_x from Table where field='something'";
$result=@ mysqli_query($connection, $query);
if(mysqli_num_rows($result)>0)
{
   $row=@ mysqli_fetch_array($result);
}
$data='';
if(isset($row['field_x']))
{
   // query result is HARVESTED
   $data=$row['field_x'];
}

如果查询结果不为null,则可以在查询块中的代码中的每个位置使用$ data(= $ row ['field_x'])。

在节点中是否有一种非常简单直接的方式(类似于PHP方式)。

基本上我想用全局范围定义一个arrray / variable并将其传递给connection-query块并将该数组/变量放入查询结果中,如:

var Array=[]; // global scope
var mysql = require('mysql');
var connection = mysql.createConnection({some_stuff});

connection.connect();
var queryString = 'SELECT field_x FROM Table';
connection.query(queryString, function(err, rows, fields) {
if (err) throw err;

for (var i in rows) {
    Array.push(rows[i].field_x));
}
});

connection.end();

有任何建议/意见吗?

问候。

2 个答案:

答案 0 :(得分:0)

看起来您在查询完成运行之前结束了连接&响应。尝试将connection.end()放在回调中。

答案 1 :(得分:0)

我感觉有点傻到回答我自己的问题......无论如何。

我的问题是,是否有类似PHP的方法从数据库中获取数据。 问题在于,由于PHP不是异步的,因此在正常的执行流程中查询数据库,这意味着必须等到数据库服务器响应才能执行下一行代码。 在node.js的异步世界中,查询数据库涉及回调,这些回调不在同步执行流程中。

因此,在这种情况下,尝试实现类似的PHP代码将失败,因为对数据库查询意味着设置的数组的任何引用同步发生,同时查询数据库是异步任务,意味着它将在同步流完成执行后的某个时刻执行。