Maison  >  Article  >  interface Web  >  Comment faire fonctionner et utiliser MySQL dans Nodejs (avec code)

Comment faire fonctionner et utiliser MySQL dans Nodejs (avec code)

不言
不言original
2018-08-14 16:46:021567parcourir

Le contenu de cet article explique comment utiliser et utiliser MySQL dans Nodejs (avec du code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Installation

npm install mysql

Tester MySQL

Téléchargez MySQL et installez-le vous-même.
Utilisez l'exemple officiel

var mysql      = require(‘mysql’); 
  var connection = mysql.createConnection({ 
    host     : ‘localhost’, 
    user     : ‘me’, 
    password : ‘secret’, 

    database : ‘my_db’ 

  });//创建mysql链接 

   connection.connect(); 

   connection.query(‘SELECT 1 + 1 AS solution’, function (error, results, fields) { 

    if (error) throw error; 

    console.log(‘The solution is: ‘, results[0].solution); 

  });//执行sql语句 

   connection.end();//关闭链接
Découvrez les options de connexion

Si vous souhaitez créer une connexion à une base de données, vous devez d'abord comprendre les options

  host:主机地址 (默认:localhost) 

  user:用户名 

  password:密码 

  port:端口号 (默认:3306) 

  database:数据库名 

  charset:连接字符集(默认:’UTF8_GENERAL_CI’,注意字符集的字母都要大写) 

  localAddress:此IP用于TCP连接(可选) 

  socketPath:连接到unix域路径,当使用 host 和 port 时会被忽略 

  timezone:时区(默认:’local’) 

  connectTimeout:连接超时(默认:不限制;单位:毫秒) 

  stringifyObjects:是否序列化对象(默认:’false’ ;与安全相关(https://github.com/felixge/node-mysql/issues/501) 

  typeCast:是否将列值转化为本地JavaScript类型值 (默认:true) 

  queryFormat:自定义query语句格式化方法 (https://github.com/felixge/node-mysql#custom-format) 

  supportBigNumbers:数据库支持bigint或decimal类型列时,需要设此option为true (默认:false) 

  bigNumberStrings:supportBigNumbers和bigNumberStrings启用 强制bigint或decimal列以JavaScript字符串类型返回(默认:false) 

  dateStrings:强制timestamp,datetime,data类型以字符串类型返回,而不是JavaScript Date类型(默认:false) 

  debug:开启调试(默认:false) 

  multipleStatements:是否许一个query中有多个MySQL语句 (默认:false) 

  flags:用于修改连接标志,更多详情:(https://github.com/felixge/node-mysql#connection-flags) 

  ssl:使用ssl参数(与crypto.createCredenitals参数格式一至)或一个包含ssl配置文件名称的字符串,目前只捆绑Amazon RDS的配置文件

Ajouter, supprimer, modifier, vérifier

Ajouter, supprimer, modifier et vérifier sont principalement déterminés par des instructions SQL.

1. Ajouter
var  userAddSql = ‘INSERT INTO userinfo(Id,UserName,UserPass) VALUES(0,?,?)’; 

  var  userAddSql_Params = [‘Wilson’, ‘abcd’]; 

  connection.query(userAddSql,userAddSql_Params,function (err, result) { 

    … 

  });
2. Supprimer
var userModSql = ‘DELETE FROM userinfo’; 

  connection.query(userModSql,function (err, result) { 

  … 

  });
3. >
var userModSql = ‘UPDATE userinfo SET UserName = ?,UserPass = ? WHERE Id = ?’; 

  var userModSql_Params = [‘钟慰’, ‘5678’,1]; 

  connection.query(userModSql,userModSql_Params,function (err, result) { 

  … 

  });
4. Requête
var  userGetSql = ‘SELECT * FROM userinfo’; 

  connection.query(userGetSql ,function (err, result) { 

  … 

  });
Deux méthodes et différences pour mettre fin à la connexion à la base de données

Dans l'exemple précédent, je suis à la fin Une méthode connection.end() sera appelée. Cette méthode correspond à connection.connect(), l'une démarre et l'autre se termine !

Il existe en fait deux méthodes pour mettre fin à la connexion : end() et destroy();


La méthode end() est exécutée une fois les requêtes terminées. La méthode end() reçoit une fonction de rappel s'il y en a. une erreur dans l'exécution de la requête, la connexion est terminée. L'erreur sera renvoyée au paramètre err de la fonction de rappel et pourra être gérée dans la fonction de rappel !

Destory() est relativement violent. Il n'a pas de fonction de rappel et est exécuté immédiatement, que la requête soit terminée ou non !

Déconnexion et reconnexion

var mysql = require(‘mysql’); 

  var db_config = { 

    host     : ‘192.168.0.200’, 

    user     : ‘root’, 

    password : ‘abcd’, 

    port: ‘3306’, 

    database: ‘nodesample’ 

  }; 

  var connection; 

  function handleDisconnect() { 

    connection = mysql.createConnection(db_config); 

    connection.connect(function(err) { 

      if(err) { 

        console.log(“进行断线重连:” + new Date()); 

        setTimeout(handleDisconnect, 2000);   //2秒重连一次 

        return; 

      } 

       console.log(“连接成功”); 

    }); 

    connection.on(‘error’, function(err) { 

      console.log(‘db error’, err); 

      if(err.code === ‘PROTOCOL_CONNECTION_LOST’) {  

        handleDisconnect(); 

      } else { 

        throw err; 

      } 

    }); 

  } 

  handleDisconnect();
pool de liens SQL Regroupement des connexions

1 Pour créer un pool de connexions, utilisez la méthode createPool. , les options sont cohérentes avec createConntion et peuvent surveiller les événements de connexion.

Le pool de connexions se déconnectera et se reconnectera automatiquement

var mysql = require(‘mysql’); 

  //创建连接池 

  var pool  = mysql.createPool({ 

    host     : ‘192.168.0.200’, 

    user     : ‘root’, 

    password : ‘abcd’ 

  }); 

  //监听connection事件 

  pool.on(‘connection’, function(connection) { 

      connection.query(‘SET SESSION auto_increment_increment=1’); 

  }); 

    

  连接池可以直接使用,也可以共享一个连接或管理多个连接(引用官方示例) 

  //直接使用 

  pool.query(‘SELECT 1 + 1 AS solution’, function(err, rows, fields) { 

    if (err) throw err; 

    console.log(‘The solution is: ‘, rows[0].solution); 

  }); 

  //共享 

  pool.getConnection(function(err, connection) { 

    // connected! (unless err is set) 

  });
Autres options de configuration du pool de connexions

waitForConnectionsLorsque le pool de connexions n'a pas de connexions ou dépasse la limite maximale, définissez-le sur true et la connexion sera mise dans la file d'attente. Définissez sur false et une erreur sera renvoyée

limite du numéro de connexion connectionLimit. , par défaut : 10

queueLimit maximum Limite de file d'attente des demandes de connexion, définie sur 0 pour indiquer aucune limite, par défaut : 0

 

3. Libération


Appel de la connexion. La méthode release() remettra la connexion dans le pool de connexions, en attendant que d'autres utilisateurs l'utilisent !Autres...

1 escape()

. Pour empêcher l'injection SQL, vous pouvez utiliser pool.escape() et connect.escape(). Pas grand chose à dire, vous pouvez essayer

comme ceci en utilisant 'SELECT * FROM userinfo WHERE id = ' + pool.escape. (' 5 OR ID = 6')

2.escapeId()
Si vous ne pouvez pas faire confiance à l'identifiant SQL (nom de la base de données, nom de la table, nom de la colonne), vous pouvez utiliser la méthode de conversion escapeId();

Similaire à ceci 'SELECT * FROM posts ORDER BY ' + connect.escapeId("date");

3.format()

Vous pouvez utiliser MySQL. format pour préparer les instructions de requête. La fonction choisit automatiquement la méthode appropriée pour échapper aux paramètres.


4. Fonction de formatage personnalisé

var sql = “SELECT * FROM ? WHERE ? = ?”; 

     var inserts = [‘users’, ‘id’, 123]; 

      sql = mysql.format(sql, inserts);

Recommandations associées :

connection.config.queryFormat = function (query, values) {
  if (!values) return query;
  return query.replace(/:(\w+)/g, function (txt, key) {
    if (values.hasOwnProperty(key)) {
      return this.escape(values[key]);
    }
    return txt;
  }.bind(this));
};
connection.query("UPDATE posts SET title = :title", { title: "Hello MySQL" });

Code js pour implémenter le transfert de données entre les pages

Comment implémenter la fonction de changement de couleur de peau

Quelles sont les méthodes dans jQuery ? Méthodes couramment utilisées dans jQuery (avec code)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn