PHP

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

Как добавить в базу данных mysql используя php код

Вступление

В этом руководстве вы познакомитесь с тем, как начать управлять базой данных из вашего PHP скрипта. Вы изучите добавление записи в таблицу MySQL, используя PHP код. Перед тем как начать, ознакомьтесь с нашими другими руководствами, которые раскрывают основные шаги работы с PHP и базами данных – подключение из PHP к базе данных MySQL(англ.).

Что понадобится

Перед началом проверьте наличие следующего:

  • Доступ к вашей панели управления хостингом

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

Прежде всего, нам нужно создать таблицу для ваших данных. Это очень простая процедура, которую вы можете сделать в phpMyAdmin из вашей панели управления хостингом. Мы уже описывали процесс создания базы данных MySQL в предыдущем руководстве(англ.), поэтому мы пропустим этот момент здесь.Панель управления Hostinger - PhpMyAdmin

После входа на страницу phpMyAdmin вы увидите подобную картину:Hostinger - PhpMyAdmin

Создадим таблицу с названием Students для нашей базы данных u266072517_name. Создать новую таблицу можно по кнопке Create Table. После этого вы увидите новую страницу, где вы можете ввести все необходимые данные для своей таблицы:Создание таблицы в PhpMyAdmin на Hostinger

Это наиболее простой способ создания таблицы, для получения большей информации по поводу структуры таблицы/базы данных и какие настройки можно использовать для каждого поля, обратитесь к официальной документации phpMyAdmin(англ.).

Приведём здесь несколько простых пояснение полей, которые мы будем использовать:

  • Name – это имя вашего поля. Будет отображено в самом верху вашей таблицы.
  • Type – здесь можно установить тип поля. Например, мы выбираем varchar, потому что здесь нам нужно ввести строку с именем (в котором есть буквы, не цифры).
  • Length/Values – используется для задания максимальной длины вашей записи в этом поле.
  • Index – мы используем индекс “Primary” для нашего поля “ID”. Когда создаётся таблица, рекомендуется иметь одно поле ID. Она используется для индексации записей в таблице, когда настраиваются взаимосвязи между таблицами. Здесь также можно отметить “A_I”, что означает Auto Increment. Эта настройки будет автоматически увеличивать индекс (1,2,3,4…).

Нажмите Save и ваша таблица будет создана.

Шаг 2 — Создание PHP кода и добавление записи в таблицу MySQL

Вариант 1 – Метод MySQLi 

Прежде всего, нужно установить соединение с базой данных, согласно нашему предыдущему руководству. После этого мы можем продолжить с SQL запросом на добавление записи в таблицу MySQL – INSERT. Здесь полный пример кода с подключением и методом вставки:

<?php
$servername = "mysql.hostinger.co.uk";
$database = "u266072517_name";
$username = "u266072517_user";
$password = "buystuffpwd";

// Create connection

$conn = mysqli_connect($servername, $username, $password, $database);

// Check connection

if (!$conn) {
      die("Connection failed: " . mysqli_connect_error());
}
 
echo "Connected successfully";
 
$sql = "INSERT INTO Students (name, lastname, email) VALUES ('Thom', 'Vial', 'thom.v@some.com')";
if (mysqli_query($conn, $sql)) {
      echo "New record created successfully";
} 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 – это выражение, которое добавляет запись в указанную таблицу базы данных MySQL. В нашем примере мы добавляем данные в таблицу Students.

Двигаясь дальше, в скобках, мы определяем поля таблицы, значения в которые будем добавлять: (name, lastname, email). Данные будут добавлены в определённом порядке. Если мы напишем (email, lastname, name), значения будут добавлены в другом порядке.

Следующая часть значения VALUES. Здесь мы задаём наши значения в ранее указанные поля. Таким образом, каждое поле получит своё значение. Например, в нашем случае это будет что-то вроде: name = Thom, lastname = Vial, email = thom.v@some.com.

Что важно отметить, что тут мы формируем запрос SQL, используя PHP код. SQL запросы должны быть заключены в кавычки. В нашем примере, всё между кавычками и идущее после $sql = это SQL запрос.

Следующая часть кода (20 – 22 строки) запускает наш запрос и производит проверку успешности выполнения запроса:

if (mysqli_query($conn, $sql)) {
     echo "New record created successfully";
}

Выводится сообщение об удаче, если запрос был запущен верно.

В поисках лучшего варианта размещения своего сайта?

Переносите свой сайт на самую быструю хостинг платформу с выделенной поддержкой 24/7.

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

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

Этот код отображает нам сообщение об ошибке, на случай, если что-то пошло не так.

Вариант 2 – Метод объектов данных PHP (PHP Data Object)

Как и в предыдущем примере, нам нужно прежде всего выполнить подключение к базе данных, которое производится при создании нового объекта PDO – предыдущее руководство рассказывает о том, как это происходит. Поскольку подключение к базе данных MySQL – это PDO объект, мы должны использовать различные PDO ‘методы’ (своего рода функции, которые являются частью определённого объекта) для подготовки и запуска запроса. Методы объектов вызываются таким образом:

$the_Object->the_Method();

PDO позволяет ‘подготовить’ SQL код перед его выполнением. Запрос SQL вычисляется и корректируется перед запуском. Так, простая атака путём SQL инъекции может быть выполнена заполняя код SQL в поле формы. Например:

// User writes this in the username field of a login form thom"; DROP DATABASE user_table;

// The final query becomes this
"SELECT * FROM user_table WHERE username = thom"; DROP DATABASE user_table;

Поскольку SQL код синтаксически правильный, точка с запятой делает из DROP DATABASE user_table новый запрос SQL, и ваша таблица пользователей удалена. Подготавливаемые выражения не разрешают символы  и ; для завершения исходного запроса, и инструкция DROP DATABASE никогда не выполнится.

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

Для использования подготавливаемых выражений, нужно создать новую переменную, которая вызовет метод prepare() на объекте базы данных.

В правильном виде код выглядит:

$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];

// Create a new connection to the MySQL database using PDO, $my_Db_Connection is an object
try { 
  $my_Db_Connection = new PDO($sql, $username, $password, $dsn_Options);
  echo "Connected successfully";
} catch (PDOException $error) {
  echo 'Connection error: ' . $error->getMessage();
}

// Set the variables for the person we want to add to the database
$first_Name = "Thom";
$last_Name = "Vial";
$email = "thom.v@some.com";

// Here we create a variable that calls the prepare() method of the database object
// The SQL query you want to run is entered as the parameter, and placeholders are written like this :placeholder_name
$my_Insert_Statement = $my_Db_Connection->prepare("INSERT INTO Students (name, lastname, email) VALUES (:first_name, :last_name, :email)");

// Now we tell the script which variable each placeholder actually refers to using the bindParam() method
// First parameter is the placeholder in the statement above - the second parameter is a variable that it should refer to
$my_Insert_Statement->bindParam(:first_name, $first_Name);
$my_Insert_Statement->bindParam(:last_name, $last_Name);
$my_Insert_Statement->bindParam(:email, $email);

// Execute the query using the data we just defined
// The execute() method returns TRUE if it is successful and FALSE if it is not, allowing you to write your own messages here
if ($my_Insert_Statement->execute()) {
  echo "New record created successfully";
} else {
  echo "Unable to create record";
}

// At this point you can change the data of the variables and execute again to add more data to the database
$first_Name = "John";
$last_Name = "Smith";
$email = "john.s@email.com";
$my_Insert_Statement->execute();

// Execute again now that the variables have changed
if ($my_Insert_Statement->execute()) {
  echo "New record created successfully";
} else {
  echo "Unable to create record";
}

В строках 28, 29 и 30 мы используем метод bindParam() объекта базы данных. Есть так же метод bindValue(), отличающийся от предыдущего.

  • bindParam() – этот метод подсчитывает данные, когда метод execute() достигнут. Первый раз, когда скрипт доходит до метода execute() он видит, что $first_Name ссылается на “Thom”, связывает это значение и выполняет запрос. Когда скрипт добирается второй раз до метода execute(), он смотрит, что $first_Name теперь ссылается на “John”, связывает это значение и запускает запрос опять с новым значением. Важно понимать, что мы создаём запрос один раз и затем подставляем разные данные в разных местах скрипта.
  • bindValue() – этот метод вычисляет данные, как только до него доходит очередь. Так как значение $first_Name было задано как “Thom”, на момент, когда мы достигли метода bindValue(), оно будет использован при вызове метода execute() для $my_Insert_Statement.

Обратите внимание, что мы повторно используем переменную $first_Name и задаём ей новое значение во второй раз. Если вы проверите свою базу данных после запуска этого скрипта, там будут оба из заданных имени, вопреки этому значение переменной $first_Name будет равно “John” в конце этого скрипта. Помните, что PHP оценивает содержимое скрипта перед его запуском.

Если вы измените свой скрипт заменив bindParam на bindValue, вы добавите в базу MySQL “Thom Vial” дважды в базу данных и John Smith будет проигнорирован.

Шаг 3 — Проверка успешности выполнения и решение общих вопросов

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

Успешное выполнение скрипта

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

MySQLi

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

Неудачное выполнение скрипта

Как мы видим, первая часть кода в порядке, подключение было успешно установлено, но наш запрос 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 manual that corresponds to your MySQL server version for the right syntax 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: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; <code>check the manual that corresponds to your MySQL server version for the right syntax to use near '{name, lastname, email} VALUES ('Thom', 'Vial', 'thom.v@some.com')' at line 1"</code>

Другие проблемы, с которым вы можете столкнуться:

  • Неверно указаны поля (несуществующие поля или ошибки в написании названий).
  • Несоответствие типа значения типу поля. Например, когда мы хотим присвоить значение числа 47 полю Name, мы получим ошибку, потому что предполагается, что значение будет строкой. Но, если вы укажете число в кавычках, например, “47”, ошибки не будет, потому что наше число будет записано как строка в это поле.
  • Попытка ввести данные в таблицу, которой не существует или ошибка в написании названия таблицы.

Все эти ошибки могут быть исправлены следуя руководствам по исправлению ошибок или проверяя журнал ошибок(англ.).

После успешного добавления данных мы должны увидеть их в нашей базе данных. Вот пример таблицы, в которую мы добавили наши данные, если смотреть в phpMyAdmin.добавление записи в таблицу mysql - финал

Заключение

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

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

Нажмите здесь, чтобы оставить комментарий

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Присоединяйтесь к тысячам других подписчиков по всему миру

и получайте самые свежие руководства на вашу электронную почту

Пожалуйста, подождите...

Спасибо за подписку!

Начните экономить сейчас!

Хостинг и доменное имя от

руб.95
00