Добавление данных PDO
Для добавления данных в БД MySQL применяется sql-команда INSERT
, которая имеет следующий
синтаксис:
INSERT INTO название_таблицы (столбец1, столбец2, столбецN) VALUES ( значение1, значение2, значениеN)
Данная команда также выполняется методом exec()
объекта PDO
. Стоит отметить, что для
sql-команд INSERT
, UPDATE
и DELETE
метод exec()
возвращает количество
затронутных командой строк (добавленных, измененных или удаленных). Таким образом, мы можем узнать сколько строк было добавлено.
Сначала рассмотрим простейшее добавление одного объекта в БД. Для примера возьмем созданную в прошлой теме базу
данных testdb1
и созданную в ней таблицу Users
со следующим определением:
CREATE TABLE Users (id INTEGER AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30), age INTEGER)
И для добавления определим следующий скрипт PHP:
<?php
try {
$conn = new PDO("mysql:host=localhost;dbname=testdb1", "root", "mypassword");
// SQL-выражение для добавления данных
$sql = "INSERT INTO Users (name, age) VALUES ('Tom', 37)";
$affectedRowsNumber = $conn->exec($sql);
echo "В таблицу Users добавлено строк: $affectedRowsNumber";
}
catch (PDOException $e) {
echo "Database error: " . $e->getMessage();
}
?>
Команда на добавление здесь выглядит следующим образом:
"INSERT INTO Users (name, age) VALUES ('Tom', 37)"
То есть в столбец name
добавляется строка Tom
, а в столбец age
- число 37. Для столбца id
не добавляется никакого значения, потому что при создании таблицы для него указан параметр AUTO_INCREMENT
- то есть значение этого
столбца у каждой добавляемой строки будет автоматически увеличиваеться по сравнению с предыдущей на единицу.
При добавлении мы получаем количество добавленных строк в переменую $affectedRowsNumber
и затем выводим
ее значение в браузере. Поэтому при успешном добавлении мы увидим:
В таблицу Users добавлено строк: 1
Множественное добавление
Также мы можем добавить сразу несколько объектов:
<?php
try {
$conn = new PDO("mysql:host=localhost;dbname=testdb1", "root", "mypassword");
$sql = "INSERT INTO Users (name, age) VALUES
('Sam', 41),
('Bob', 29),
('Alice', 32)";
$affectedRowsNumber = $conn->exec($sql);
echo "В таблицу Users добавлено строк: $affectedRowsNumber";
}
catch (PDOException $e) {
echo "Database error: " . $e->getMessage();
}
?>
Здесь в таблицу добавляется три строки. Соответственно в браузере мы увидим:
В таблицу Users добавлено строк: 3
Добавление данных из формы HTML
В большинстве случаев добавляемые данные будут приходить из вне, например, присылаться в запросе пользователя. Рассмотрим добавление данных, отправленных из формы HTML. Для этого определим следующий скрипт:
<!DOCTYPE html>
<html>
<head>
<title>hmarketing.ru</title>
<meta charset="utf-8" />
</head>
<body>
<?php
if (isset($_POST["username"]) && isset($_POST["userage"])) {
$username = $_POST["username"];
$userage = $_POST["userage"];
try {
$conn = new PDO("mysql:host=localhost;dbname=testdb1", "root", "mypassword");
$sql = "INSERT INTO Users (name, age) VALUES ('$username', $userage)";
$affectedRowsNumber = $conn->exec($sql);
// если добавлена как минимум одна строка
if($affectedRowsNumber > 0 ){
echo "Data successfully added: name=$username age= $userage";
}
}
catch (PDOException $e) {
echo "Database error: " . $e->getMessage();
}
}
?>
<h3>Create a new User</h3>
<form method="post">
<p>User Name:
<input type="text" name="username" />
</p>
<p>User Age:
<input type="number" name="userage" />
</p>
<input type="submit" value="Save">
</form>
</body>
</html>
Здесь мы проверяем, пришли ли с сервера данные в POST-запросе, которые имеют ключи username
и userage
:
if (isset($_POST["username"]) && isset($_POST["userage"])) {
Если эти данные имеются, то есть был отправлен post-запрос с данными на добавление, то мы получаем эти данные в переменные и добавляем их в бд.
$sql = "INSERT INTO Users (name, age) VALUES ('$username', $userage)";
Если была добавлена строка, то есть метод exec()
возвратил число больше нуля, то выводим пользователю
соответствующее сообщение.
После кода php собственно определена форма на добавление данных с помощью post-запроса.
Запустим скрипт. Введем в форму данные и нажмем на кнопку:
И данные будут добавлены. Вроде все хорошо. Однако здесь есть большой недостаток.