Php форма додавання даних у бд. Php запис до бази даних mysql. Практичні приклади. Неправильний тип даних

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

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

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

Крок 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. Тут повний приклад коду з підключенням та методом вставки:

" . mysqli_error($conn); ) mysqli_close($conn); ?>

Таким чином перша частина коду (рядки 3 – 18 ) відносяться до частини встановлення з'єднання до бази даних. Ми не будемо знову проходити по цій частині, якщо ви хочете знати, що означає кожен рядок, зверніться до нашого попереднього керівництва, як підключитися до бази даних (англ.).

Почнемо з рядка 19 :

$sql = "INSERT INTO Students (name, lastname, email) VALUES ("Thom", "Vial", " [email protected]")";

Це найважливіший рядок коду, він робить усе, що ми описуємо у цьому посібнику – додавання запису в таблицю MySQL до бази даних. INSERT INTO– це вираз, який додає запис у таблицю бази даних MySQL. У нашому прикладі ми додаємо дані до таблиці Students.

Рухаючись далі, у дужках, ми визначаємо поля таблиці, значення яких будемо додавати: (name, lastname, email). Дані будуть додані у визначеному порядку. Якщо ми напишемо (email, lastname, name)значення будуть додані в іншому порядку.

Наступна частина значення VALUES. Тут ми задаємо наші значення раніше вказані поля. Таким чином, кожне поле набуде свого значення. Наприклад, у нашому випадку це буде щось на зразок: name = Thom, lastname = Vial, email = [email protected] .

Що важливо відзначити, що тут ми формуємо запит SQL, використовуючи PHP код. SQL запити повинні бути укладені в лапки. У нашому прикладі, все між лапками і після $sql = це SQL запит.

Наступна частина коду ( 20 – 22 рядки) запускає наш запит і здійснює перевірку успішності виконання запиту:

If (mysqli_query($conn, $sql)) ( echo "New record created successfully"; )

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

І заключна частина ( 22 – 24 рядки) показують інше повідомлення, у разі невдалого виконання нашого запиту:

Else ( echo "Error: " . $sql . "
" . mysqli_error($conn); )

Цей код відображає нам повідомлення про помилку, якщо щось пішло не так.

Варіант 2 – Метод об'єктів даних PHP (P HP D ata O bject)

Як і в попередньому прикладі, нам потрібно насамперед виконати підключення до бази даних, яке здійснюється під час створення нового об'єкта PDO – попередній посібник розповідає про те, як це відбувається. Оскільки підключення до бази даних MySQL – це PDO об'єкт, ми повинні використовувати різні PDO 'методи' (свого роду функції, які є частиною певного об'єкта) для підготовки та запуску запиту. Методи об'єктів викликаються таким чином:

$the_Object->the_Method();

PDO дозволяє підготувати SQL код перед його виконанням. Запит SQL обчислюється та коригується перед запуском. Так, проста атака шляхом ін'єкції SQL може бути виконана заповнюючи код SQL в полі форми. Наприклад:

// User writes this in username field of login for 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 = ; // Create a new connection to the MySQL database using PDO, $my_Db_Connection is object try ( $my_Db_Connection = новий PDO($sql, $username, $password, $dsn_Options); echo "Connected successfully"; ) catch (PDOException $ error) ( echo "Connection error: " . $error->getMessage(); ) // Налаштувати параметри для людини, щоб отримати до 데이터베이스 $first_Name = "Thom"; $last_Name = "Vial"; $email = " [email protected]"// Тут ми створили варіацію, що телефонує preparation() метод з Database об'єкт // SQL SQL виконає, що ви збираєтеся встановлювати як параметр, і placeholders є вірним як цей: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 placeholder in statement above - second parameter is variable that it should refer to $my_Insert_Statement->bindParam(:first_name, $first_Name); bindParam(:email, $email); $my_Insert_Statement->execute()) ( echo "New record created successfully"; ) else ( echo "Unable to create record"; ) // У цьому пункті ви можете змінити дані про variables і execute до більшого data to database $first_Name = "John"; $last_Name = "Smith"; $email = " [email protected]$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", " [email protected]") Ви маєте небезпеку в вашій SQL syntaxі; виконайте автоматичне, що відповідає вашій MySQL версії сервера для правої syntax для використання поблизу "(name, lastname, email) VALUES ("Thom", "Vial", " [email protected]")" at line 1"

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

$sql = "INSERT INTO Students (name, lastname, email) VALUES ("Thom", "Vial", " [email protected]")";

Як ви бачите, ми використовуємо фігурні дужки замість круглих. Це не так і призводить до синтаксичної помилки в нашому скрипті.

PDO

У рядку 7 підключення PDO режим обробки помилок встановлено в 'display all exceptions' (відображати всі винятки). Якщо ви приберете це зі скрипту і запит зазнає невдачі, ви не отримаєте жодного повідомлення про помилку. З увімкненими винятками, будуть відображатися конкретні проблеми. В основному, це краще використовувати, коли розробляєте скрипт, так як це може виявити імена баз даних та таблиць, які ви б хотіли сховати від будь-кого, хто може отримати несанкціонований доступ до ваших даних. У разі вище, коли фігурні дужки використовували замість круглих, помилка виглядає, як показано нижче:

Випадковий error: Неможливий висновок "PDOException" with message "SQLSTATE: Syntax error або access violation: 1064 Ви маєте error in your SQL syntax; check the manual that corresponds to your MySQL server version for right syntax to used near "(name, lastname, email) VALUES ("Thom", "Vial", " [email protected]")" at line 1"

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

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

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

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

Висновок

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

У цьому уроці ми розглянемо, як вставляти дані в БД безпосередньо з ваших РНР-скриптів.

Вставка даних із використанням SQL

Ви використовуєте SQL для вставки даних у БД так само, як використовуєте SQL для створення БД та таблиць. Синтаксис SQL-запиту такий:

INSERT INTO Ім'яТаблиці (стовпець1, стовпець 2, ...) VALUES(значення1,значення 2, ...)

Як бачите, ви можете оновлювати кілька стовпців в одному SQL-операторі, вказуючи їх у розділеному комами списку. Але, зрозуміло, можна специфікувати лише один стовпець і одне значення. Стовпці, не згадані у цьому SQL-операторі, залишаться порожніми.

Приклад: Вставка нової персони у таблицю

У цьому прикладі ми використовуємо БД з Уроку 18 . Скажімо, ми хочемо вставити персону у БД. Це може бути Gus Gooseз номером телефону 99887766 та датою народження 1964-04-20 .

Оператор SQL може виглядати так:

$strSQL = "INSERT INTO people(FirstName,LastName,Phone,BirthDate) VALUES("Gus","Goose","99887766 ","1964-04-20")";

Як бачите, SQL-оператори можуть бути дуже довгими і можна легко втратити слід. Тому краще записувати SQL-оператор трохи інакше:

strSQL = "INSERT INTO people("; strSQL = strSQL. "FirstName,"; strSQL = strSQL. "LastName," strSQL = strSQL. "Phone,"; strSQL = strSQL. "birth)"; strSQL = strSQL. "VALUES ("; strSQL = strSQL . ""Gus", "; strSQL = strSQL. ""Goose", "; strSQL = strSQL. "99887766", "; strSQL = strSQL. "1964-04-20"); mysql_query($strSQL) або die(mysql_error());

Тут SQL-оператор будується з розподілом пропозиції на невеликі частини з наступним об'єднанням їх у змінну $strSQL.

На практиці немає різниці у застосуванні того чи іншого методу, але при роботі з великими таблицями стає вкрай важливою можливість "тримати слід", тому вибирайте найбільш підходящий метод.

Спробуємо виконати наступний код для вставки Gus Goose у БД:

Вставка даних у БД // З'єднання з сервером БД mysql_connect("mysql.myhost.com", "user", "sesame") або die (mysql_error());// Вибір БД mysql_select_db("mydatabase") or die(mysql_error()); // Побудова SQL-оператора $strSQL = "INSERT INTO people("; $strSQL = $strSQL. "FirstName,"; $strSQL = $strSQL. "LastName,"; $strSQL = $strSQL. "Phone,"; $strSQL = $strSQL. "BirthDate)"; $strSQL = $strSQL. "VALUES("); $strSQL = $strSQL. ""Gus", "; $strSQL = $strSQL. ""Goose", "; $strSQL = $strSQL. "99887766", "; $strSQL = $strSQL. "1964-04-20"); // SQL-оператор виконується mysql_query($strSQL) або die (mysql_error()); // Закриття з'єднання mysql_close(); ?>

БД оновлено!



Збереження введення користувача в БД

Ви, мабуть, вже зрозуміли, що для цього можна створити форму, як в Уроці 11 , а значення форми можна вставити в SQL-оператор. Припустимо, у вас є проста форма:

Ця форма надсилається у файл insert.php, де ви, як показано в Уроці 11, можете отримати введення користувача, запросивши вміст форми. У даному випадку SQL-оператор може бути таким:

strSQL = "INSERT INTO people(FirstName) values("" . $_POST["FirstName"] . "")"

Аналогічно можна запитати дані кук, сесій рядків запиту, etc.

Найбільш поширені помилки початківців

Спочатку ви, можливо, отримуватимете купу повідомлень про помилки при спробах оновити БД. Працюючи з БД абсолютно неприпустимі ніякі похибки. Неправильно поставлена ​​кома може означати, що БД не оновлюється, і ви отримаєте повідомлення про помилку. Нижче ми описуємо найпоширеніші помилки.

Неправильний тип даних

Важливо, щоб дані та тип даних стовпця відповідали один одному. Кожен стовпець може містити дані певного типу. Наступний скріншот показує типи даних таблиці “people” з нашого прикладу.

Видається помилка, якщо ви, наприклад, спробуєте вставити текст або число в поле даних. Отже, встановлюйте тип даних якнайточніше.

Нижче наведено найбільш вживані типи даних:

Значення Тип даних Розмір
CHR
Текст або комбінація тексту та чисел. Може також використовуватися для числа, які не використовуються під час розрахунків (напр., номери телефонів). До 255 символів - або довжина, що визначається "Length"
TEXT
Великі блоки тексту або комбінація тексту та чисел. До 65,535 символів
INT
Числові дані для математичних обчислень. 4 байти
DATE
Дати у форматі РРР-ММ-ДД 3 байти
TIME
Час у форматі чч:мм:сс 3 байти
DATETIME
Дата та час у форматі РРР-ММ-ДД чч:мм:сс 8 байт

SQL-оператори з лапками або зворотними слешами

Якщо ви спробуєте вставити текст, що містить символи одинарної лапки ("), подвійної лапки (") або зворотного слеша (\), запис не буде вставлений у БД. Рішенням буде підстановка зворотних слешів перед символами, які повинні менімонізуватися при вставці у запити БД.

У цій статті ми розглянемо, як використовувати PHP для вставлення рядків у базу MySQL.

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

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

Після входу ви phpMyAdmin ви побачите такий інтерфейс:
Створимо в базі даних таблицю з ім'ям Students, натиснувши кнопку «Створити таблицю». Після цього ми побачите нову сторінку, на якій задаємо всі необхідні параметри таблиці:

Це найпростіше налаштування, яке можна використовувати для таблиці та отримання додаткової інформації про структуру таблиць/баз даних.

Параметри стовпців:

  • Name – це ім'я стовпця, яке відображається у верхній частині таблиці.
  • Type – тип стовпця. Наприклад, ми вибрали varchar, тому що будемо вводити рядкові значення.
  • Length/Values ​​— використовується для визначення максимальної довжини, яку може мати запис у цьому стовпці.
  • Index ми використовували «Первинний» індекс для поля «ID». При створенні таблиці рекомендується застосовувати як первинний ключ тільки один стовпець. Він використовується для переліку записів у таблиці і потрібен для налаштування таблиці. Я також наголосив на «A_I», що означає «Auto Increment» — параметр автоматичного присвоєння номера записів (1,2,3,4…).
    Натисніть кнопку "Зберегти", і таблиця буде створена.

Крок 2. Написання PHP-коду для вставки даних MySQL.

Варіант 1 - метод MySQLi

Спочатку необхідно встановити з'єднання з базою даних. Після цього використовуємо SQL-запит INSERT. Повний приклад коду:

" . mysqli_error($conn); ) mysqli_close($conn); ?>

Перша частина коду (3-18 рядок) призначена для підключення до бази даних.

Почнемо з рядка № 19:

$sql = "INSERT INTO Students (name, lastname, email) VALUES ("Thom", "Vial", " [email protected]")";

Вона вставляє дані до бази MySQL. INSERT INTO — це оператор, який додає дані до зазначеної таблиці. У прикладі дані додаються в таблицю Students.

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

Наступна частина – це оператор VALUES. Тут ми вказуємо значення для стовпців: name = Thom, lastname = Vial, email = [email protected].

Ми запустили запит за допомогою PHP-коду. У програмному коді SQL-запити мають бути екрановані лапками. Наступна частина коду (20-22 рядок) перевіряє, чи був наш запит успішним:

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

Цей код відображає повідомлення про успішне виконання запиту.

І остання частина (22 - 24 рядок) відображає повідомлення, якщо запит не був успішним:

else ( echo "Error: " . $sql . "
" . mysqli_error($conn); )

Варіант 2 - метод об'єкта даних PHP (PDO)

Спочатку потрібно підключитися до бази даних шляхом створення нового об'єкта PDO. Працюючи з ним використовуватимемо різні методи PDO. Методи об'єктів викликаються так:

$the_Object->the_Method();

PDO дозволяє підготувати SQL-код до його виконання. SQL-запит оцінюється та «виправляється» перед запуском. Наприклад, найпростіша атака з використанням ін'єкції SQL може бути виконана через просте введення SQL-коду в поле форми. Наприклад:

Так як це синтаксично правильний SQL-код, точка з комою робить DROP DATABASE user_table новим SQL-запитом, і таблиця користувача видаляється. Підготовлені вирази (пов'язані змінні) не дозволяють, щоб крапка з комою та лапки завершували вихідний запит. Тому команда DROP DATABASE ніколи не буде виконана.

Щоб використати підготовлені вирази, потрібно написати нову змінну, яка викликає метод prepare() об'єкта бази даних.

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

getMessage(); ) // Встановлюємо змінні для персони, яку ми хочемо додати до бази даних $first_Name = "Thom"; $last_Name = "Vial"; $email = " [email protected]// Створюємо змінну, яка викликає метод об'єкта бази даних 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); // Виконуємо запит, використовуючи дані, які щойно визначили // Метод execute() повертає TRUE, якщо він виконаний успішно, і FALSE, якщо ні, надаючи можливість вивести власне повідомлення if ($my_Insert_Statement->execute()) ( echo "Новий рекордстворенийуспішно"; ) else ( echo "Unable to createrecord"; ) // У цій точці можна змінити дані змінних і виконати запит, щоб додати інші дані в базу data to the database $first_Name = "John"; $last_Name = "Smith"; $email = " [email protected]$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

У будь-якому іншому випадку буде відображено повідомлення про помилку. Наприклад, давайте зробимо в коді одну синтаксичну помилку, і ми отримаємо таке:

Перша частина коду в порядку, з'єднання успішно встановлено, але SQL-запит не пройшов.

"Error: INSERT INTO Students (name, lastname, email) VALUES ("Thom", "Vial", " [email protected]") Ви маєте небезпеку в вашій SQL syntaxі; виконайте автоматичнийвідповідь до вашої MySQL серверної версії для правоїсинтакти для використання поблизу "(name, lastname, email) VALUES ("Thom", "Vial", " [email protected]")" at line 1"

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

$sql = "INSERT INTO Students (name, lastname, email) VALUES ("Thom", "Vial", " [email protected]")";

Ми використовували фігурні дужки замість звичайних. Це не так, і скрипт видав синтаксичну помилку.

PDO

У рядку 7 з'єднання PDO для режиму помилок встановлено "display all exceptions". Якщо встановлено інше значення, і запит не вдався б, ми не отримали б жодних повідомлень про помилки.

Це налаштування слід використовувати лише при розробці скрипту. Під час її активації можуть відображатися імена бази даних та таблиць, які краще приховати з метою безпеки. У цьому випадку, коли замість звичайних дужок використовувалися фігурні, повідомлення про помилку виглядає так:

Недостатній error: Неправильнийвідповідь "PDOException" з повідомленням "SQLSTATE: Syntax error або accessviolation: 1064 Ви маєте error in your SQL syntax; виконати автоматичнийвідповідь до вашої MySQL версії сервера для правогосинтакту для використання в найближчому майбутньому "(name, lastname, email) VALUES ("Thom", "Vial", " [email protected]")" at line 1"

Інші можливі проблеми:

  • Невірно вказані стовпці (неіснуючі стовпці чи орфографічна помилка у тому іменах).
  • Один тип значення присвоюється стовпцю іншого типу. Наприклад, якщо спробувати вставити число 47 в стовпець Name, то матимемо помилку. У цьому стовпці потрібно використовувати рядкове значення. Але якби ми вказали число в лапках (наприклад, «47»), то спрацювало б, бо це рядок.
  • Спроба ввести дані до таблиці, яка не існує. Допущена орфографічна помилка у імені таблиці.

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

Висновок

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

Дана публікація є перекладом статті « How to Use PHP to Insert Data Into MySQL Database» , підготовленою дружною командою проекту


Урок буде заснований на формі зворотного зв'язкунеобхідно практично на будь-якому сайті.

Крок перший: Створення бази даних у MySQL

Відкриваємо phpMyAdmin(входить до базового пакету Denwerа), і створюємо базу з назвою " test_base", кодування вибираємо" CP1251_general_ci".

Крок другий: Створення таблиці в MySQLза допомогою SQL-запиту

Створити таблицю можна, звісно, ​​і за допомогою стандартних засобів phpMyAdmin, але наочно буде видно структура створюваної таблиці.

Створюємо таблицю під назвою " test_tableі з шістьма полями з назвами:
"name" - тут зберігатимуться імена користувачів;
"email" - тут зберігатимуться адреси електронних скриньок користувачів;
"theme" - тут зберігатиметься тема повідомлення;
"message" - тут зберігатимуться повідомлення;
"data" - тут зберігатиметься дата відправлення повідомлення;
"id" - ідентифікаційний номер запису (рядки), ключове поле.

SQL-запит:
create table test_table(
id int(11) not null auto_increment,
name varchar(255) not null,
email varchar(255) not null,
theme varchar(255) not null,
message text not null,
data date not null,
primary key (id)
);

Крок третій: Створення форми

index.html:

Форма із збереженням у MySQL

Приклад форми із збереженням даних у MySQL

























Надсилання запиту
Ім'я:
E-Mail:
Тема повідомлення:
Повідомлення:


























Крок четвертий: Створення оброблювача форми save_form.php" зі збереженням отриманих даних у MySQL

save_form.php:





/* Таблиця MySQL, у якій зберігатимуться дані */
$ table = "test_table";

/* Створюємо з'єднання */

/* Визначаємо поточну дату */
$cdate = date("Y-m-d");

/* Складаємо запит для вставки інформації до таблиці
name...date - назва конкретних полів у базі;
$_POST["test_name"]... $_POST["test_mess"] - у цих змінних містяться дані, отримані з форми */
$query = "INSERT INTO $table SET name="".$_POST["test_name"]."", email="".$_POST["test_mail"]."",
theme="".$_POST["test_theme"]."", message="".$_POST["test_mess"]."", data="$cdate"";

/* Закриваємо з'єднання */
mysql_close();

/* У разі успішного збереження виводимо повідомлення та посилання повернення */
echo ("


Дані успішно збережено!



Повернутися назад
");

Крок п'ятий: Виведення збережених даних " view_data.php"

view_data.php:

/* З'єднуємося з базою даних */
$hostname = "localhost"; // назва/шлях сервера, з MySQL
$username = "root"; // ім'я користувача (у Denwer`і за промовчанням "root")
$password = ""; // пароль користувача (у Denwer`і за замовчуванням пароль відсутній, цей параметр можна залишити порожнім)
$dbName = "test_base"; // Назва бази даних


$ table = "test_table";

/* Створюємо з'єднання */
mysql_connect($hostname, $username, $password) or die ("Не можу створити з'єднання");

/* Вибираємо базу даних. Якщо буде помилка - вивести її */
mysql_select_db($dbName) або die (mysql_error());

/* Складаємо запит для вилучення даних з полів "name", "email", "theme",
"message", "data" таблиці "test_table" */
$query = "SELECT id, name, email, theme, message, data FROM $table";

/* Виконуємо запит. Якщо станеться помилка – вивести її. */


echo ("

Виведення даних з MySQL

Виведення раніше збережених даних з таблиці MySQL










");



echo "

\n";
echo " \n";
echo " \n";
echo " \n";
echo " \n";
echo " \n";
echo " \n\n";
}

Echo ("

# дата звернення Імена користувачів E-Mail користувачів Тема повідомлення Повідомлення користувачів
".$row["id"]."".$row["data"]."".$row["name"]."".$row["email"]."".$row["theme"]."".$row["message"]."
\n");

/* Закриваємо з'єднання */
mysql_close();

Крок шостий: Видалення записів із бази даних " del_data.php"

del_data.php:

/* З'єднуємося з базою даних */
$hostname = "localhost"; // назва/шлях сервера, з MySQL
$username = "root"; // ім'я користувача (у Denwer`і за промовчанням "root")
$password = ""; // пароль користувача (у Denwer`і за замовчуванням пароль відсутній, цей параметр можна залишити порожнім)
$dbName = "test_base"; // Назва бази даних

/* Таблиця MySQL, у якій зберігаються дані */
$ table = "test_table";

/* Створюємо з'єднання */
mysql_connect($hostname, $username, $password) or die ("Не можу створити з'єднання");

/* Вибираємо базу даних. Якщо буде помилка - вивести її */
mysql_select_db($dbName) або die (mysql_error());

/* Якщо було натиснуто посилання видалення, видаляємо запис */
$del = $query = "delete від $table where (id="$del")";
/* Виконуємо запит. Якщо станеться помилка – вивести її. */
mysql_query($query) або die(mysql_error());



/* Виконуємо запит. Якщо станеться помилка – вивести її. */
$res = mysql_query($query) або die(mysql_error());

$row = mysql_num_rows($res);

/* Виводимо дані з таблиці */
echo ("

Виведення та видалення даних з MySQL

Виведення та видалення раніше збережених даних з таблиці MySQL











");

/* Цикл виведення даних із бази конкретних полів */
while ($row = mysql_fetch_array($res)) (
echo "

\n";
echo " \n";
echo " \n";
echo " \n";
echo " \n";
echo " \n";
echo " \n";
/* Генеруємо посилання для видалення поля */
echo " \n";
echo "\n";
}

Echo ("

# дата звернення Імена користувачів E-Mail користувачів Тема повідомлення Повідомлення користувачів Вилучення
".$row["id"]."".$row["data"]."".$row["name"]."".$row["email"]."".$row["theme"]."".$row["message"]."видалити
\n");

/* Закриваємо з'єднання */
mysql_close();

Крок сьомий: Редагування та оновлення записів у базі " update_data.php"

update_data.php:

/* З'єднуємося з базою даних */
$hostname = "localhost"; // назва/шлях сервера, з MySQL
$username = "root"; // ім'я користувача (у Denwer`і за промовчанням "root")
$password = ""; // пароль користувача (у Denwer`і за замовчуванням пароль відсутній, цей параметр можна залишити порожнім)
$dbName = "test_base"; // Назва бази даних

/* Таблиця MySQL, у якій зберігаються дані */
$ table = "test_table";

/* Створюємо з'єднання */
mysql_connect($hostname, $username, $password) or die ("Не можу створити з'єднання");

/* Вибираємо базу даних. Якщо буде помилка - вивести її */
mysql_select_db($dbName) або die (mysql_error());

/* Якщо була натиснута кнопка редагування, вносимо зміни */
if(@$submit_edit) (
$query = "UPDATE $table SET name="$test_name", email="$test_mail", theme="$test_theme", message="$test_mess" WHERE id="$update"";
/* Виконуємо запит. Якщо станеться помилка – вивести її. */
mysql_query($query) або die (mysql_error());
}

/* Заносимо в змінну $res всю базу даних */
$query = "SELECT * FROM $table";
/* Виконуємо запит. Якщо станеться помилка – вивести її. */
$res = mysql_query($query) або die(mysql_error());
/* Дізнаємось кількість записів у базі даних */
$row = mysql_num_rows($res);

/* Виводимо дані з таблиці */
echo ("

Редагування та оновлення даних

Редагування та оновлення даних у таблиці MySQL


");

/* Цикл виведення даних із бази конкретних полів */
while ($row = mysql_fetch_array($res)) (
echo "

\n";
echo " \n";
echo " \n";
echo " \n";
echo " \n";
echo "\n";
echo " \n";
echo "\n";
echo " \n";
echo "\n";
echo " \n";
echo "\n";
echo " \n";
echo "\n";
echo " \n";
echo "
#".$row["id"]."
".$row["data"]."
Ім'я користувача:
E-Mail користувача:
Тема повідомлення:
Повідомлення:
\n\n";
}

/* Закриваємо з'єднання */
mysql_close();

Ну ось і все, приємного кодингу:1133:

_________________________________

У цій статті ми розберемо, мабуть, одні з найважливіших SQL-запитів. Це запити на додавання та видалення записів з таблиці бази даних. Оскільки, ДУЖЕ часто доводиться додавати нові записи до таблиці, причому робити це автоматично, то цей матеріал обов'язковий до вивчення.

Для початку SQL-запит на додавання нового запису до таблиці:

INSERT INTO users (login, pass) values("TestUser", "123456")

При додаванні запису спочатку йде команда " INSERT INTO", потім назва таблиці, в яку ми вставляємо запис. Далі йде у круглих дужках назви полів, які ми хочемо заповнити. А потім у круглих дужках після слова valuesпочинаємо перераховувати значення тих полів, які ми вибрали. Після виконання цього запиту в нашій таблиці з'явиться новий запис.

Іноді потрібно оновити запис у таблицідля цього існує наступний SQL-запит:

UPDATE users SET login="TestUser2", pass="1234560" WHERE login="TestUser"

Цей запит є більш складним, тому що він має конструкцію " WHERE", але про неї трохи нижче. Спочатку йде команда" UPDATE", потім ім'я таблиці, а після " SETМи описуємо значення всіх полів, які ми хочемо змінити. Було б все просто, але постає питання: А який саме запис слід оновлювати?". Для цього існує" WHERE". В даному випадку ми оновлюємо запис, поле" login"у якої має значення" TestUserЗверніть увагу, що якщо таких записів буде кілька, то оновляться абсолютно всі! Це дуже важливо розуміти, інакше ви ризикуєте втратити свою таблицю.

Давайте трохи ще поговоримо про " WHEREКрім простих перевірок на рівність існують так само і нерівності, а також логічні операції: ANDі OR.

UPDATE users SET login = "TestUser2", pass="1234560" WHERE id< 15 AND login="TestUser"

Даний SQL-запитоновить ті записи, idяких менше 15 Іполе " login" має значення " TestUser". Сподіваюся, Ви розібралися з конструкцією" WHERE", тому що це дуже важливо. Саме " WHERE"використовується при вибірці записів із таблиць, а це завдання, що найчастіше використовується при роботі з базами даних.

І, насамкінець, простий SQL-запит видалення записів з таблиці:

DELETE FROM users WHERE login="TestUser2"

Після команди " DELETE FROM" йде ім'я таблиці, у якій потрібно видалити записи. Далі описуємо конструкцію " WHERE " . Якщо запис буде відповідати описаним умовам, вона буде видалена. Знову ж таки зверніть увагу, залежно кількості записів, задовольняють умові після " WHERE", може вийти будь-яка їх кількість.