- Как использовать PHP для вставки строк в базу данных MySQL
- Шаг 1 — Создание таблицы
- Шаг 2. Написание PHP-кода для вставки данных в MySQL.
- Вариант 1 — метод MySQLi
- Вариант 2 — метод объекта данных PHP (PDO)
- Inserting Data into Tables from PDO
- The steps for inserting a row into a table
- Inserting a row into a table example
- Inserting multiple rows into a table example
- Summary
Как использовать PHP для вставки строк в базу данных MySQL
В этой статье мы рассмотрим, как использовать PHP для вставки строк в базу данных MySQL.
Шаг 1 — Создание таблицы
Сначала нужно создать таблицу для данных. Это простая процедура, которую можно выполнить с помощью phpMyAdmin в панели управления хостингом.
После входа вы phpMyAdmin вы увидите такой интерфейс:
Создадим в базе данных u266072517_name таблицу с именем Students, нажав на кнопку «Создать таблицу». После этого мы увидите новую страницу, на которой задаем все необходимые параметры таблицы:
Это самая простая настройка, которую можно использовать для таблицы и получения дополнительной информации о структуре таблиц / баз данных.
- Name — это имя столбца, которое отображается в верхней части таблицы.
- Type — тип столбца. Например, мы выбрали varchar, потому что будем вводить строковые значения.
- Length/Values — используется для указания максимальной длины, которую может иметь запись в этом столбце.
- Index — мы использовали «Первичный» индекс для поля «ID». При создании таблицы рекомендуется применять в качестве первичного ключа только один столбец. Он используется для перечисления записей в таблице и требуется при настройке таблицы. Я также отметил «A_I», что означает «Auto Increment» — параметр автоматического присваивания номера записей (1,2,3,4 . ).
Нажмите кнопку «Сохранить», и таблица будет создана.
Шаг 2. Написание PHP-кода для вставки данных в MySQL.
Вариант 1 — метод MySQLi
Сначала необходимо установить соединение с базой данных. После этого используем SQL-запрос INSERT. Полный пример кода:
echo "Connectedsuccessfully"; $sql = "INSERT INTO Students (name, lastname, email) VALUES ('Thom', 'Vial', 'thom.v@some.com')"; if (mysqli_query($conn, $sql)) < echo "New recordcreatedsuccessfully"; >else < echo "Error: " . $sql . "
" . mysqli_error($conn); > mysqli_close($conn); ?>
Первая часть кода (3 — 18 строка) предназначена для подключения к базе данных.
$sql = "INSERT INTO Students (name, lastname, email) VALUES ('Thom', 'Vial', 'thom.v@some.com')";
Она вставляет данные в базу MySQL. INSERT INTO — это оператор, который добавляет данные в указанную таблицу. В нашем примере данные добавляются в таблицу Students.
Далее идет перечисление столбцов, в которые вставляются значения: name, lastname, email. Данные будут добавлены в указанном порядке. Если бы мы написали (email, lastname, name), значения бы были добавлены в другом порядке.
Следующая часть — это оператор VALUES. Здесь мы указываем значения для столбцов: name = Thom, lastname = Vial, email = thom.v@some.com.
Мы запустили запрос с использованием PHP-кода. В программном коде SQL-запросы должны быть экранированы кавычками. Следующая часть кода (20-22 строка) проверяет, был ли наш запрос успешным:
Этот код выводит сообщение об успешном выполнении запроса.
И последняя часть (22 — 24 строка) отображает уведомление, если запрос не был успешным:
Вариант 2 — метод объекта данных PHP (PDO)
Сначала нам нужно подключиться к базе данных путем создания нового объекта PDO. При работе с ним будем использовать различные методы PDO. Методы объектов вызываются следующим образом:
PDO позволяет «подготовить» SQL-код до его выполнения. SQL-запрос оценивается и «исправляется» перед запуском. Например, простейшая атака с использованием SQL-инъекции может быть выполнена через простое введение SQL-кода в поле формы. Например:
// Пользователь пишет это в поле имени пользователя формы авторизации john"; DROP DATABASE user_table; // Окончательный запрос будет следующим "SELECT * FROM user_table WHERE username = john"; DROP DATABASE user_table;
Так как это синтаксически правильный SQL- код, точка с запятой делает DROP DATABASE user_table новым SQL-запросом, и пользовательская таблица удаляется. Подготовленные выражения (связанные переменные) не позволяют, чтобы точка с запятой и кавычки завершали исходный запрос.Поэтому команда DROP DATABASE никогда не будет выполнена.
Чтобы использовать подготовленные выражения, нужно написать новую переменную, которая вызывает метод prepare() объекта базы данных.
PDO::ERRMODE_EXCEPTION]; // Создаем новое соединение с базой данных MySQL, используя PDO, $my_Db_Connection - это объект try < $my_Db_Connection = new PDO($sql, $username, $password, $dsn_Options); echo "Connectedsuccessfully"; >catch (PDOException $error) < echo 'Connection error: ' . $error->getMessage(); > // Устанавливаем переменные для персоны, которую мы хотим добавить в базу данных $first_Name = "Thom"; $last_Name = "Vial"; $email = "thom.v@some.com"; // Создаем переменную, которая вызывает методобъекта базы данных prepare() // Запрос SQL, который вы хотите выполнить, вводится как параметр, а заполнители пишутся следующим образом:placeholder_name $my_Insert_Statement = $my_Db_Connection->prepare("INSERT INTO Students (name, lastname, email) VALUES (:first_name, :last_name, :email)"); // Теперь мы указываем скрипту, какая переменная ссылается на каждый заполнитель, чтобы использовать метод bindParam() // Первый параметр - это заполнитель в операторе выше, второй - это переменная, на которую он должен ссылаться $my_Insert_Statement->bindParam(:first_name, $first_Name); $my_Insert_Statement->bindParam(:last_name, $last_Name); $my_Insert_Statement->bindParam(:email, $email); // Выполняем запрос, используя данные, которые только что определили // Метод execute() возвращает TRUE, если он выполнен успешно, и FALSE, если нет, предоставляя вам возможность вывести собственное сообщение if ($my_Insert_Statement->execute()) < echo "New recordcreatedsuccessfully"; >else < echo "Unable to createrecord"; >// В этой точке можно изменить данные переменных и выполнить запрос, чтобы добавить другие данные в базу data to the database $first_Name = "John"; $last_Name = "Smith"; $email = "john.smith@email.com"; $my_Insert_Statement->execute(); // Выполняем снова, когда переменная изменена if ($my_Insert_Statement->execute()) < echo "New recordcreatedsuccessfully"; >else < echo "Unable to createrecord";
В строках 28, 29 и 30 мы используем метод bindParam() объекта базы данных. Также существует метод bindValue(), который сильно отличается от предыдущего.
- bindParam() - этот метод оценивает данные при достижении метода execute(). В первый раз, когда скрипт достигает метода execute(), он видит, что $first_Name соответствует «Thom». Затем связывает это значение и запускает запрос. Когда скрипт достигает второго метода execute(), он видит, что $first_Name теперь соответствует «John». После чего связывает это значение и снова запускает запрос с новыми значениями. Важно помнить, что мы однажды определили запрос и повторно используем его с разными данными в разных точках скрипта.
- bindValue() - этот метод оценивает данные, как только достигается bindValue(). Поскольку для $first_Name было установлено значение «Thom», при достижении bindValue(), оно будет использоваться каждый раз, когда вызывается метод execute() для $my_Insert_Statement.
Обратите внимание, что мы повторно используем переменную $first_Name и присваиваем ей новое значение во второй раз. После запуска скрипта в БД будут указаны оба имени, несмотря на то, что переменная $first_Name в конце скрипта имеет значение «John». Помните, что PHP проверяет весь скрипт, прежде чем запустить его.
Если вы обновите скрипт, чтобы заменить bindParam на bindValue, вы дважды вставите в базу данных «Thom Vial», а John Smith будет проигнорирован.
Inserting Data into Tables from PDO
Summary: in this tutorial, you will learn how to insert one or more rows into a table using PHP PDO.
The steps for inserting a row into a table
To insert a row into a table, you follow these steps:
- First, connect to the database by creating a new PDO object.
- Second, construct the INSERT statement. If you need to pass a value to the INSERT statement, you can use the placeholders in the format :parameter . Later, you can substitute the parameter by its value.
- Third, create a prepared statement by calling the prepare() method of the PDO object. The prepare() method returns an instance of the PDOStatement class.
- Finally, call the execute() method of the prepared statement and pass the values.
Inserting a row into a table example
The following example shows how to insert a new row into the publishers table:
$pdo = require_once 'connect.php'; // insert a single publisher $name = 'Macmillan'; $sql = 'INSERT INTO publishers(name) VALUES(:name)'; $statement = $pdo->prepare($sql); $statement->execute([ ':name' => $name ]); $publisher_id = $pdo->lastInsertId(); echo 'The publisher id ' . $publisher_id . ' was inserted';
Code language: HTML, XML (xml)
- First, use the connect.php to connect to the bookldb database.
- Next, construct an SQL INSERT statement. The :name is the placeholder that will be replaced by a publisher name.
- Then, prepare the INSERT statement for execution by calling the prepare() method of the $pdo instance. The prepare() method returns an instance of the PDOStatement class.
- After that, execute the prepared statement by passing the values to the execute() method.
- Finally, get the inserted id by calling the lastInsertId() method of the PDO object.
Note that this tutorial uses the connect.php script developed in the connecting to the database tutorial.
Inserting multiple rows into a table example
To insert multiple rows into a table, you need to call execute() the method multiple times. The method inserts a new row into the table in each call. For example:
$pdo = require_once 'connect.php'; $names = [ 'Penguin/Random House', 'Hachette Book Group', 'Harper Collins', 'Simon and Schuster' ]; $sql = 'INSERT INTO publishers(name) VALUES(:name)'; $statement = $pdo->prepare($sql); foreach ($names as $name) < $statement->execute([ ':name' => $name ]); >
Code language: HTML, XML (xml)
In this example, we have a list of publishers stored in the $names array.
To insert these publishers into the publishers table, we iterate over the elements of the $names array using the foreach and insert each element into the table.