Для выполнения запросов у объекта подключения применяется метод 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)