Як зробити запис у базу даних MySQL, використовуючи PHP-код

Last Updated on: Травень 28th, 2018Elena B. 10 Хв Читання

Вступ

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

Зміст

  • Що знадобиться
  • Крок 1 — Створення таблиці
  • Крок 2 — Створення PHP коду і додавання запису в таблицю MySQL
  • Крок 3 — Перевірка успішності виконання і вирішення загальних питань
  • Висновок

Що знадобиться

Перед початком перевірте наявність наступного:

  • Доступ до панелі управління хостингом

Крок 1 — Створення таблиці

Насамперед, нам потрібно створити таблицю для ваших даних. Це дуже проста процедура, яку ви можете зробити в phpMyAdmin з вашої панелі управління хостингом. Ми вже описували процес створення бази даних MySQL в попередньому керівництві(англ.), тому ми пропустимо цей момент тут.

Після входу на сторінку phpMyAdmin ви побачите таку картину:

Створимо таблицю з назвою Students для нашої бази даних u266072517_name. Створити нову таблицю можна по кнопці Create Table. Після цього ви побачите нову сторінку, де ви можете ввести всі необхідні дані для своєї таблиці:

Це найбільш простий спосіб створення таблиці, для отримання більшої інформації щодо структури таблиці/бази даних та які параметри можна використовувати для кожного поля, зверніться до офіційної документації 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 (‘Тома’, ‘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 (‘Тома’, ‘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”;
}

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

І заключна частина (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 тома”; DROP DATABASE user_table;

// The final query becomes this
“SELECT * FROM user_table WHERE username = тома”; 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 = “Тома”;
$last_Name = “Vial”;
$email = “thom.v@some.com”;

// Here we create a variable that calls the prepare() method of the object database
// 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, $e);

// 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 посилається на “Тома”, пов’язує це значення і виконує запит. Коли скрипт добирається другий раз до методу execute(), він дивиться, що $first_Name тепер посилається на “John”, пов’язує це значення і запускає запит знову з новим значенням. Важливо розуміти, що ми створюємо запит один раз і потім підставляємо різні дані в різних місцях скрипта.
  • bindValue() – цей метод обчислює дані, як тільки до нього доходить черга. Так як значення $first_Name було задано як “Тома”, на момент, коли ми досягли методу 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 (‘Тома’, ‘Vial’, ‘thom.v@some.com’)
You have an error in your SQL syntax; check that the manual corresponds to your MySQL server version for the right syntax to use near ‘{name, lastname, email} VALUES (‘Тома’, ‘Vial’, ‘thom.v@some.com’)’ at line 1”

Допущена синтаксична помилка, яка призводить до невдачі у виконанні нашого скрипта. Помилка була тут:

$sql = “INSERT INTO Students {name, lastname, email} VALUES (‘Тома’, ‘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 that the manual corresponds to your MySQL server version for the right syntax to use near ‘{name, lastname, email} VALUES (‘Тома’, ‘Vial’, ‘thom.v@some.com’)’ at line 1″</code>

Інші проблеми, з якими ви можете зіткнутися:

  • Невірно вказані поля (неіснуючі поля або помилки в написанні назв).
  • Невідповідність типу значення типу поля. Наприклад, коли ми хочемо привласнити значення числа 47 поля Name, ми отримаємо помилку, тому що передбачається, що значення буде рядком. Але, якщо ви вкажете число в лапках, наприклад, “47”, помилки не буде, тому що наше число буде записано як рядок в це поле.
  • Спроба ввести дані в таблицю, якої не існує або помилка в написанні назви таблиці.

Всі ці помилки можуть бути виправлені дотримуючись порад щодо виправлення помилок або перевіряючи журнал помилок(англ.).

Після успішного додавання даних ми повинні побачити їх у нашій базі даних. Ось приклад таблиці, в яку ми додали наші дані, якщо дивитися в phpMyAdmin.

Висновок

У цьому керівництві ви вивчили, як використовувати PHP код для додавання запису в таблицю MySQL з використанням MySQLi і PDO. Також розглянули випадки поширених помилок і їх вирішення. Знання того, як використовувати PHP код, щоб додати в базу даних MySQL нагоді незалежно від того, ви вчіться програмувати або вже створюєте свій сайт.