Выполнение запросов к MySQL

Последнее обновление: 28.04.2019

Для выполнения запросов у объекта подключения применяется метод query(). Наиболее простая его форма:

query(sqlString, callback)

Где sqlString - выполняемая SQL-команда, а callback - функция обратного вызова, через параметры которой мы можем получить результаты выполнения sql-команды или возникшую ошибку.

Например, получим все данные из таблицы:

const mysql = require("mysql2");
 
const connection = mysql.createConnection({
  host: "localhost",
  user: "root",
  database: "usersdb",
  password: "123456"
});

connection.query("SELECT * FROM users",
  function(err, results, fields) {
    console.log(err);
    console.log(results); // собственно данные
    console.log(fields); // мета-данные полей 
});
connection.end();

В данном случае выполняется команда SELECT, которая извлекает все данные из таблицы "users". Функция обратного вызова принимает три параметра. Первый параметр передает ошибка, если она возникла при выполнении запроса. Второй параметр - results собственно представляет в виде массива те данные, которые получила команда SELECT. И третий параметр fields хранит метаданные полей таблицы и дополнительную служебную информацию.

Стоит отметить, что при выполнении запросов неявно устанавливается подключение, поэтому перед выполнением запроса нам в принципе необязательно у объекта подключения вызывать метод connect().

Также в mysql2 определен метод execute(), который работает аналогичным образом:

const mysql = require("mysql2");
 
const connection = mysql.createConnection({
  host: "localhost",
  user: "root",
  database: "usersdb",
  password: "123456"
});

connection.execute("SELECT * FROM users",
  function(err, results, fields) {
    console.log(err);
    console.log(results); // собственно данные
    console.log(fields); // мета-данные полей 
});
connection.end();

Параметризация запросов

Если в запрос надо вводить данные, которые приходят извне, то для избежания sql-инъекций рекоммендуется использовать параметризацию.

При параметризации вместо конкретных данных в тексте запроса ставятся плейсхолдеры - знаки вопроса, вместо которых при выполнении запроса будут вставляться собственно данные. Например, добавление данных:

const mysql = require("mysql2");
 
const connection = mysql.createConnection({
  host: "localhost",
  user: "root",
  database: "usersdb2",
  password: "123456"
});

const user = ["Tom", 29];
const sql = "INSERT INTO users(name, age) VALUES(?, ?)";

connection.query(sql, user, function(err, results) {
    if(err) console.log(err);
    else console.log("Данные добавлены");
});

connection.end();

В данном случае данные определены в виде массива user, которая в качестве параметра передается в метод connection.query(). При выполнении запроса эти данные по порядку ставляются в запрос место вопросительных знаков. То есть фактически запрос будет выглядеть так: INSERT INTO users(name, age) VALUES("Tom", 29)

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850