Добавление данных MySQLi
В прошлой теме мы добавили в базу данных таблицу Users с тремя столбцами id
, name, age со следующим определением:
CREATE TABLE Users (id INTEGER AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30), age INTEGER)
Теперь добавим в нее данные. Для добавления данных в MySQL применяется команда INSERT
:
INSERT INTO название_таблицы (столбец1, столбец2, столбецN) VALUES ( значение1, значение2, значениеN)
Объектно-ориентированный подход
<?php
$conn = new mysqli("localhost", "root", "mypassword", "testdb2");
if ($conn->connect_error){
die("Ошибка: " . $conn->connect_error);
}
$sql = "INSERT INTO Users (name, age) VALUES ('Tom', 37)";
if ($conn->query($sql)) {
echo "Данные успешно добавлены";
} else {
echo "Ошибка: " . $conn->error;
}
$conn->close();
?>
Множественное добавление:
<?php
$conn = new mysqli("localhost", "root", "mypassword", "testdb2");
if ($conn->connect_error) {
die("Ошибка: " . $conn->connect_error);
}
$sql = "INSERT INTO Users (name, age) VALUES
('Sam', 41),
('Bob', 29),
('Alice', 32)";
if ($conn->query($sql)) {
echo "Данные успешно добавлены";
} else {
echo "Ошибка: " . $conn->error;
}
$conn->close();
?>
Процедурный подход
<?php
$conn = mysqli_connect("localhost", "root", "mypassword", "testdb3");
if (!$conn) {
die("Ошибка: " . mysqli_connect_error());
}
$sql = "INSERT INTO Users (name, age) VALUES ('Tom', 37)";
if (mysqli_query($conn, $sql)) {
echo "Данные успешно добавлены";
} else {
echo "Ошибка: " . mysqli_error($conn);
}
mysqli_close($conn);
?>
Множественное добавление:
<?php
$conn = mysqli_connect("localhost", "root", "mypassword", "testdb3");
if (!$conn) {
die("Ошибка: " . mysqli_connect_error());
}
$sql = "INSERT INTO Users (name, age) VALUES
('Sam', 41),
('Bob', 29),
('Alice', 32)";
if (mysqli_query($conn, $sql)) {
echo "Данные успешно добавлены";
} else {
echo "Ошибка: " . mysqli_error($conn);
}
mysqli_close($conn);
?>
Добавление данных из формы HTML
В большинстве случаев добавляемые данные будут приходить из вне, например, присылаться в запросе пользователя.
Рассмотрим добавление данных, отправленных из формы HTML. Для этого определим веб-страницу form.html
, на которой определим следующий код:
<!DOCTYPE html>
<html>
<head>
<title>hmarketing.ru</title>
<meta charset="utf-8" />
</head>
<body>
<h3>Добавление пользователя</h3>
<form action="create.php" method="post">
<p>Имя:
<input type="text" name="username" />
</p>
<p>Возраст:
<input type="number" name="userage" />
</p>
<input type="submit" value="Добавить">
</form>
</body>
</html>
Здесь определены два поля ввода. И по нажатию на кнопку их данные в запросе POST будут уходить скрипту create.php
. Теперь определим сам скрипт
create.php
.
Объектно-ориентированный подход
<?php
if (isset($_POST["username"]) && isset($_POST["userage"])) {
$conn = new mysqli("localhost", "root", "mypassword", "testdb2");
if ($conn->connect_error) {
die("Ошибка: " . $conn->connect_error);
}
$name = $conn->real_escape_string($_POST["username"]);
$age = $conn->real_escape_string($_POST["userage"]);
$sql = "INSERT INTO Users (name, age) VALUES ('$name', $age)";
if ($conn->query($sql)) {
echo "Данные успешно добавлены";
} else {
echo "Ошибка: " . $conn->error;
}
$conn->close();
}
?>
Здесь мы проверяем, пришли ли с сервера данные в POST-запросе, которые имеют ключи username
и userage
:
if (isset($_POST["username"]) && isset($_POST["userage"]))
Если эти данные имеются, то есть был отправлен post-запрос с данными на добавление, то мы получаем эти данные в
переменные и добавляем их в бд. Но перед добавлением к этим данным применяется метод $conn->real_escape_string()
, которая
принимает сохраняемое значение и экранирует в нем спецсимволы, что позволяет защитить от SQL-инъекций.
В итоге после ввода данных и нажатия на кнопку данные в запросе POST уйдут скрипту create.php
, который
сохранит их в базу данных.
Процедурный подход
<?php
if (isset($_POST["username"]) && isset($_POST["userage"])) {
$conn = mysqli_connect("localhost", "root", "mypassword", "testdb3");
if (!$conn) {
die("Ошибка: " . mysqli_connect_error());
}
$name = mysqli_real_escape_string($conn, $_POST["username"]);
$age = mysqli_real_escape_string($conn, $_POST["userage"]);
$sql = "INSERT INTO Users (name, age) VALUES ('$name', $age)";
if (mysqli_query($conn, $sql)) {
echo "Данные успешно добавлены";
} else {
echo "Ошибка: " . mysqli_error($conn);
}
mysqli_close($conn);
}
?>
Здесь применяется функция mysqli_real_escape_string()
. Она служит для экранизации символов в
строке, которая потом используется в запросе SQL. В качестве параметров она принимает объект подключения и строку, которую надо экранировать.