В прошлой теме мы добавили в базу данных таблицу 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. Для этого определим веб-страницу form.html, на которой определим следующий код:
<!DOCTYPE html> <html> <head> <title>METANIT.COM</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. В качестве параметров она принимает объект подключения и строку, которую надо экранировать.