Как использовать PHP для вставки строк в базу данных MySQL

Как использовать PHP для вставки строк в базу данных MySQL

Вступление

В данной статье мы рассмотрим, как использовать PHP для вставки строк в базу данных MySQL.

Шаг 1 — Создание таблицы

Сначала необходимо создать таблицу для данных. Это простая процедура, которую можно легко выполнить при помощи phpMyAdmin в панели управления веб-хостингом.

Как использовать PHP для вставки строк в базу данных MySQL
После входа вы phpMyAdmin вы увидите такой интерфейс:
Как использовать PHP для вставки строк в базу данных MySQL Создадим в базе данных u266072517_name таблицу с именем Students, нажав на кнопку «Создать таблицу». После этого мы увидите новую страницу, на которой задаем все необходимые настройки таблицы:
Как использовать PHP для вставки строк в базу данных MySQL
Это самая простая параметр, которую можно без проблем использовать для таблицы и получения дополнительной информации о структуре таблиц / баз данных.

Настройки столбцов:

  • Name — это имя столбца, которое выводится в верхней части таблицы.
  • Type — тип столбца. К примеру, мы выбрали varchar, так как будем вводить строковые значения.
  • Length/Values — используется для указания максимальной длины, которую может иметь запись в этом столбце.
  • Index — мы использовали «Первичный» индекс для поля ввода «ID». При создании таблицы рекомендуется применять в виде первичного ключа только один столбец. Он используется для перечисления записей в таблице и требуется при параметру таблицы. Я также отметил «A_I», что означает «Auto Increment» — настройка автоматического присваивания номера записей(1,2,3,4 …). Нажмите кнопку «Сохранить», и таблица будет создана.

Шаг 2. Написание PHP-кода для вставки данных в MySQL.

Вариант 1 — способ MySQLi

Сначала надо установить соединение с базой данных. После этого используем SQL-запрос INSERT. Полный пример кода:

<?php$servername = "mysql.hostinger.co.uk";$database = "u266072517_name";$username = "u266072517_user";$password = "buystuffpwd";// Устанавливаем соединение$conn = mysqli_connect($servername, $username, $password, $database);// Проверяем соединениеif(!$conn) {die("Connection failed: ". mysqli_connect_error());}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. "<br>". mysqli_error($conn);}mysqli_close($conn);?>

Первая часть кода(3 — 18 строка) предназначена для подключения к базе данных.

Начнем со строки № 19:

$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 строка) проверяет, был ли наш запрос успешным:

if(mysqli_query($conn, $sql)) { echo "New recordcreatedsuccessfully";}

Этот код отображает сообщение об успешном выполнении запроса.

И последняя часть(22 — 24 строка) выводит уведомление, если запрос не был успешным:

else { echo "Error: ". $sql. "<br>". mysqli_error($conn);}

Вариант 2 — способ объекта данных PHP(PDO)

Сначала нам необходимо подключиться к базе данных путем создания нового объекта PDO. При работе с ним будем использовать разные способы PDO. Способы объектов вызываются следующим образом:

$the_Object->the_Method();

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() объекта базы данных.

Корректный код:

<?php$servername = "mysql.hostinger.com";$database = "u266072517_name"; $username = "u266072517_user";$password = "buystuffpwd";$sql = "mysql:host=$servername;dbname=$database;";$dsn_Options = [PDO::ATTR_ERRMODE => 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 будет проигнорирован.

Шаг 3 — подтверждение успешного выполнения и решение проблем

Если запрос на вставку строк в базу был успешным, мы увидим следующее сообщение:

Устранение распространенных ошибок

MySQLi

В любом ином случае будет отображено сообщение об ошибке. К примеру, давайте сделаем в коде одну синтаксическую ошибку, и мы получим следующее:

Как использовать PHP для вставки строк в базу данных MySQL
Первая часть кода в порядке, соединение было успешно установлено, но SQL-запрос не прошел.

"Error: INSERT INTO Students {name, lastname, email} VALUES('Thom', 'Vial', 'thom.v@some.com')You have an error in your SQL syntax; check the manualthatcorresponds to your MySQL server version for the rightsyntax to use near '{name, lastname, email} VALUES ('Thom', 'Vial', 'thom.v@some.com')' at line 1"

Была допущена синтаксическая ошибка, которая вызвала сбой скрипта. Ошибка была здесь:

$sql = "INSERT INTO Students {name, lastname, email} VALUES ('Thom', 'Vial', 'thom.v@some.com')";

Мы использовали фигурные скобки вместо обычных. Это неверно, и скрипт выдал синтаксическую ошибку.

PDO

В строке 7 соединения PDO для режима ошибок установлено «display all exceptions». Если задано иное значение, и запрос не удался бы, мы не получили бы никаких сообщений об ошибках.

Данную настройку следует использовать только при разработке скрипта. При ее активации могут выводиться имена базы данных и таблиц, которые лучше скрыть в целях безопасности. В описанномвыше случае, когда вместо обычных скобок использовались фигурные, сообщение об ошибке выглядит так:

Fatal error: Uncaughtexception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or accessviolation: 1064 You have an error in your SQL syntax; <code>check the manualthatcorresponds to your MySQL server version for the rightsyntax to use near '{name, lastname, email} VALUES ('Thom', 'Vial', 'thom.v@some.com')' at line 1"</code>

Иные возможные проблемы:

  • Неверно указаны столбцы (несуществующие столбцы или орфографическая ошибка в их именах).
  • Один тип значения присваивается столбцу иного типа. К примеру, если попытаться вставить число 47 в столбец Name, то получим ошибку. В этом столбце надо использовать строковое значение. Но если бы мы указали число в кавычках (к примеру, «47») то сработало бы, так как это строка.
  • Попытка ввести данные в таблицу, которая не существует. А также допущенная орфографическая ошибка в имени таблицы.

После успешного ввода данных мы увидим, что они добавлены в базу данных. Ниже приведен пример таблицы, в которую добавили данные.

Как использовать PHP для вставки строк в базу данных MySQL

Заключение

В данной статье мы рассказали, как использовать PHP для вставки данных в базу данных MySQL, используя MySQLi и PDO. А также о том, как устранять распространенные ошибки. Данные знания будут полезны при изучении программирования и при разработке собственного веб-сайта.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *