node-mysql 操做

安裝node-mysql

在node.js採用npm的方式來進行模塊的安裝。node.js安裝的話有兩種方式能夠經過-g的方式進行全局的安裝,在這種模式下安裝的模塊能夠被整個node.js的程序所引用。若是不加-g的話nodejs會在當前的目錄下新建一個node_modules文件夾,而且將下載的模塊放置在該文件夾下相應的目錄.javascript

npm install mysql -g //全局安裝 npm install mysql --save //下載至當前的目錄下java

運行第一個mysql 查詢

爲了方便我將mysql的root密碼設置爲123456,在node數據庫當中新建了一張名爲users的表,建表的語句與如所示。node

SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
--  Table structure for `users`
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `name` varchar(255) DEFAULT NULL,
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `password` varchar(256) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;

-- ----------------------------
--  Records of `users`
-- ----------------------------
BEGIN;
INSERT INTO `users` VALUES ('zs', '1', '123456'), ('ls', '2', '12345');
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;
var mysql=require('mysql');
var connection=mysql.createConnection(
    {
        host:'localhost',
        user:'root',
        password:'123456',
        database:'node'
    }
);
connection.connect();
var queryString='SELECT * FROM users';
connection.query(queryString,function(err,rows,fields){
    if(err) throw err;
    for(var i in rows){
        console.log('user name',rows[i].name);
    }
});

一樣的咱們在建立createConnection鏈接時可使用字符串來替代對象的方式mysql

var connection=mysql.createConnection('mysql://user:pass@host/node');

經過遍歷查詢的結果咱們能夠查詢到每一個字段(在上面的用例當中咱們顯示的是name)sql

console.log('user name',rows[i].name);數據庫

query用於mysql的查詢,在這裏面咱們使用了匿名函數的方式進行操做,一旦觸及到查詢的操做時會自動回調到該匿名事件當中,其中err,fields和rows分別用於顯示相應的狀態。npm

對於 上面的操做是將查詢全部的行以後再進行回調,假若咱們須要對其中的每一行進行處理的話,咱們能夠採用下面的方式進行。函數

var mysql=require('mysql');

var connection=mysql.createConnection(
    {
        host:'localhost',
        user:'root',
        password:'a63621375',
        database:'node'
    }
);
connection.connect();
var queryString='SELECT * FROM users';
var query=connection.query('select * from users');
query.on('error',function(err){
    throw err;
});
query.on('fields',function(fields){
    console.log(fields);
});
query.on('result',function(row){
    console.log(row.name);
});

有的時候咱們須要對某一行進行處理時,爲了避免影響其餘的數據,咱們不得不對查詢進行暫停進行相應的處理以後再進行恢復。ui

query.on('result', function(row) {
    connection.pause();
    // 指定處理的代碼
    console.log(row);
    connection.resume();
});

經過條件來查詢值

有的時候咱們須要採用指定查詢的條件來過濾不須要的數據,同時咱們要避免出現sql注入,在node-mysql當中有兩種方式進行條件查詢,第一種採用?來顯示code

connection.connect();
 
var key = 'zs'; 
var queryString = 'SELECT * FROM users WHERE names = ?';
 
connection.query(queryString, [key], function(err, rows, fields) {
    if (err) throw err;
 
    for (var i in rows) {
        console.log(rows[i]);
    }
});
 
connection.end();

另外一種方式是採用conection.escape()的方式

connection.connect();
 
var key = 'zs'; 
var queryString = 'SELECT * FROM users WHERE name = ' + 
                   connection.escape(key);
 
connection.query(queryString, function(err, rows, fields) {
    if (err) throw err;
 
    for (var i in rows) {
        console.log(rows[i]);
    }
});

數據插入

var user={name:"ll",password:"1234adsf"};
var query=connection.query('insert into users set ?',user,function(err,result){

});
console.log(query.sql);

insert into users set name = 'll', password = '1234adsf' //輸出的query.sql語句

關閉鏈接

在操做完成以後咱們須要對mysql進行關閉,同時咱們必需要對一些非正常關閉進行相應的處理。

//無論是正常或者非正常的關閉都會觸發close這個回調事件,
//咱們能夠在觸發close操做以後檢查關閉的緣由從而進行相應的處理
connection.on('close', function(err) {
  if (err) {
    //假若出現非正常關閉咱們從新進行鏈接 
    connection = mysql.createConnection(connection.config);
  } else {
    console.log('正常關閉.');
  }
});
相關文章
相關標籤/搜索