Создание базы данных MySQL и вставка данных через PHP

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

Создание базы данных MySQL

Этот шаг необходим, если у вас нет базы данных MySQL. Если вы являетесь пользователем какого либо хостинга, то вы можете легко создать новую Базу данных (далее – БД) через Панель управления.

Некоторые моменты я буду демонстрировать с использованием Панели управления хостингом Beget. Даже если вы используете другие хостинговые компании, то, как правило, все шаги будут очень похожими и довольно стандартными:

1. Найдите меню “MySQL” или “Базы данных MySQL” или раздел “Базы данных”.

2. Заполните необходимые поля и нажмите “Создать” или “Добавить”, как на картинке ниже.

База данных создана. Однако имейте в виду, что это пустая база данных, и вам нужно будет заполнить нужные поля, прежде чем вы сможете управлять БД.

Также вам нужно запомнить необходимую информацию – имя базы данных, логин пользователя и пароль. Эта информация будет использоваться позднее.

Как правило одни хостинги создают пользователя автоматически при создании БД, а в других нужно создать пользователя самому. В первом случае логин пользователя и имя БД скорее всего совпадают.

Два способа соединения с БД

Существует два метода подключения к базе данных MySQL с помощью PHP: MySQLi и PDO.

MySQLi расшифровывается как MySQL Improved. Это эксклюзивное расширение MySQL, которое добавляет новые функции в интерфейс базы данных MySQL. MySQLi является как процедурным, так и объектно-ориентированным, причем первый является атрибутом, унаследованным от более старой версии MySQL.

Оригинальный MySQL разбивает задачу на линейные, пошаговые процедуры, что затрудняет модификацию, так как код нужно редактировать сверху. Между тем, MySQLi видит данные как набор взаимозаменяемых объектов с функциями, что позволяет пользователям легко добавлять или удалять данные.

PDO обозначает PHP Data Object (объект данных PHP). В отличие от MySQLi, PDO ориентирована только на объект и поддерживает ряд различных типов баз данных, использующих PHP, таких как MySQL, MSSQL, Informix и PostgreSQL.

Внимание! Оригинальные функции mysql_ устарели и не должны использоваться, так как они небезопасны и больше не поддерживаются и не разрабатываются.

Одна из наиболее важных функций, которые оба варианта поддерживают, – это подготовленные операторы (англ. – prepared statements), которые ускоряют время, необходимое MySQL для выполнения одного и того же запроса несколько раз. Это также используется для предотвращения SQL-инъекции при внесении изменений в базу данных.

Какой бы метод вы ни использовали, вам потребуется правильная информация, чтобы вы могли подключиться к созданной вами базе данных MySQL. Здесь вам пригодятся ранее сохраненные данные к MySQL.

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

Напротив, если вы подключаетесь к базе данных из удаленного места (например, со своего компьютера), вам придется использовать IP-адрес сервера MySQL. Для получения дополнительной информации обратитесь к своему хостинг-провайдеру, чтобы он мог предоставить вам правильную информацию о том, что использовать в качестве имени хоста.

Использование MySQLi для подключения через PHP

Выполните следующие действия, чтобы использовать MySQLi для подключения PHP-скрипта к MySQL:

1. Перейдите в “Диспетчер файлов” (File Manager)

2. Переходим в public_html. Почти везде используется такая структура папок.

2. Создайте новый файл, щелкнув на соответствующий значок в верхнем меню. В Beget вы можете нажать правой кнопкой мыши и выбрать “Новый файл”.

3. Сохраните файл как databaseconnect.php. Вы можете заменить имя на любое другое, просто убедитесь, что оно использует .php в качестве расширения.

4. Двойным щелчком мыши откройте файл и скопируйте в него строки кода, которые ниже. Измените первые четыре значения ниже <?php с учетными данными, которые вы сохранили ранее.

<?php
$servername = "localhost";
 // имя хоста
$database = "databasename";
 // имя БД
$username = "username";
 // имя пользователя БД
$password = "password";
 // пароль, созданный для пользователя БД

// создание соединения
$conn = mysqli_connect($servername, $username, $password, $database);

// проверка соединения

if (!$conn) {

    die("Connection failed: " . mysqli_connect_error());

}
echo "Connected successfully";
mysqli_close($conn);
?>

Основным методом, используемым в этом скрипте, является mysqli_connect(). Это внутренняя PHP-функция для установления нового соединения с сервером MySQL.

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

Обычно нам нужны четыре из них, чтобы установить правильное подключение к базе данных: $servername, $database, $username и $password. В коде мы устанавливаем данные нашей базы данных в качестве значений для этих переменных, чтобы они могли быть переданы в функцию.

Если соединение не удается, выполняется функция die(). Это, по сути, “убивает” (прекращает работу) наш скрипт и дает нам сообщение об ошибке соединения, которое мы установили. По умолчанию, ошибка соединения MySQL скажет, что соединение не удалось, а затем появится точное сообщение об ошибке, описывающее проблему.

С другой стороны, если подключение MySQL будет успешным, то вместо этого код напечатает “Connected successful” (рус. – соединения успешно).

Последняя часть кода – mysqli_close, которая просто закроет соединение с базой данных вручную. Если не указать, то соединения MySQL закроются сами по себе после завершения работы скрипта.

Использование PDO для подключения через PHP

Другой метод, использующий PHP-скрипт для подключения к MySQL – это использование PDO. Этот метод похоже на предыдущий, но с небольшими изменениями:

1. В public_html создайте файл с именем pdoconfig.php и вставьте следующий код. Как всегда, не забудьте заменить значения переменных на информацию из вашей базы данных. Сохраните и закройте файл, как только закончите.

<?php
    $host = 'localhost';
    $dbname = 'databasename';
    $username = 'username';
    $password = 'password';

2. Создайте другой файл под названием databaseaseconnect.php в том же каталоге, но с кодом ниже. Если вы назвали предыдущий файл по-другому, убедитесь, что изменили значение required_once.

<?php
require_once 'pdoconfig.php';
 
try {
    $conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    echo "Connected to $dbname at $host successfully.";
} catch (PDOException $pe) {
    die("Could not connect to the database $dbname :" . $pe->getMessage());
}

Подключение к базе данных PDO требует создания нового объекта PDO с именем источника данных (DSN – Data Source Name), именем пользователя (username) и паролем (password).

DSN определяет тип базы данных, имя базы данных и при необходимости любую другую информацию, связанную с базой данных. Это переменные и значения, которые мы указали в файле dbconfig.php, на которые однажды была сделана ссылка строкой require_once в databaseaseconnect.php.

В последнем вы найдете код trycatch … Это означает, что сценарий попытается подключиться к MySQL, используя предоставленный код, но в случае возникновения проблемы будет выполнен код в разделе catch. Вы можете использовать блок catch для отображения сообщений об ошибках подключения или запустить альтернативный код, если блок try не работает.

Если соединение установлено успешно, он выведет сообщение «Подключено к $dbname на $host успешно». Однако, если попытка не удалась, код перехвата покажет простое сообщение об ошибке и завершит сценарий.

Проверка подключения и устранение распространенных ошибок

Чтобы проверить, успешно ли соединение, получите доступ к вашему домену следующим образом: yourdomain/databaseconnect.php. Если вы называете PHP-файл каким-то другим именем, убедитесь, что он изменен соответствующим образом.

Вы увидите «Подключено успешно» (Connected successfully) или варианты этого сообщения, если все работает без проблем.

Теперь, если соединение не было успешным, вы увидите другое сообщение. Сообщения об ошибках выглядят несколько иначе для MySQLi и PDO.

Incorrect Password Error

Incorrect Password Error или “Ошибка пароля”.

Эта ошибка возникает, если мы меняем пароль или какие-либо учетные данные в коде PHP (но не меняем их в реальной базе данных).

Если вы видите сообщение «Доступ запрещен» (Access denied) или «Не удалось подключиться к базе данных» (Could not connect to database), сопровождаемый «(с использованием пароля: ДА)» в конце (using password: YES), то первое, что необходимо сделать – это проверить сведения о базе данных. Возможно, здесь есть опечатка или отсутствует какая-то деталь.

Cannot Connect to MySQL Server

Cannot Connect to MySQL Server или “Не могу подключиться к серверу MySQL”.

Если вы получаете “Can’t connect to MySQL server on ‘server’ (110)” в MySQLi, это означает, что скрипт не получил ответа от сервера. Это происходит, когда мы устанавливаем “server” вместо “localhost” в качестве имени $servername, и это имя не распознается.

Сообщение об ошибке в PDO будет выглядеть как “Connection failed: SQLSTATE[Hy000] [2002]“, за которым следует более подробная информация о том, что хост My SQL не был найден. Но способ устранения неполадок такой же, как и выше.

И, конечно же, всегда важно помнить одно золотое правило поиска и устранения неисправностей: проверять журнал ошибок вашего сайта.

Журнал можно найти в той же папке, где запущен скрипт. Например, если мы запускаем скрипт в public_html, то находим error_log в той же папке.

В любом случае – проконсультируйтесь со своим хостинг-провайдером, если что-то пошло не так.

На данном этапе мы узнали самые базовые знания о том, как подключить PHP-скрипт к базе данных MySQL, используя MySQLi и PHP Data Objects (PDO).

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

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

Вставка данных в базу MySQL через PHP

Рассмотрим как вставлять (INSERT) данные в базу данных MySQL в PHP используя два метода – MySQLi и PDO.

Как и в начале материал, надеюсь, что вы не потеряли доступ к панели управления хостингом.

Создание таблицы

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

Если у вас хостинг Beget, то вы увидите маленький значок phpMyAdmin.

После входа на страницу phpMyAdmin вы должны увидеть что-то похожее на это:

Мы создадим таблицу под названием Students для нашей базы данных u104357129_name. Вы можете создать новую таблицу, нажав на кнопку “Create Table” (рус. – создать таблицу), расположенную внизу страницы.

После этого вы будете перенаправлены на новую страницу, где сможете ввести всю необходимую для вашей таблицы информацию:

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

А пока вот несколько объяснений используемых нами столбцов:

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

Нажмите «Сохранить» (Save), и ваша таблица будет создана.

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

Есть два метода, которые вы можете использовать для ВСТАВКИ (INSERT) данных в вашу базу данных MySQL. Метод PHP MySQLi и метод объекта данных PHP или PDO (PHP Data Object).

Метод MySQLi

Официальная документация MySQLi.

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

<?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 ('Test', 'Testing', 'Testing@tesing.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 ('Test', 'Testing', 'Testing@tesing.com')";

Это самая важная строка PHP-кода, поскольку она вставляет данные в базу данных MySQL. INSERT INTO – это оператор, который добавляет данные в указанную таблицу БД. В этом примере мы добавляем данные в таблицу Students.

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

Следующая часть – это выражение VALUES. Здесь мы указываем наши значения для вставки в ранее указанные столбцы. Таким образом, каждый столбец представляет определенное значение. Например, в нашем случае это будет так:

name = Test, lastname = Testing, email = Testing@testing.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);
}

Программа выдаст нам SQL-сообщение об ошибке в случае, если что-то не так.

Метод PDO

Официальная документация PDO (PHP Data Object).

Как и в предыдущем примере, нам сначала нужно соединение с базой данных, которое выполняется путем создания нового объекта PDO – смотрите выше пример того, как это сделать, если вы не уверены.

Поскольку соединение с базой данных MySQL является объектом 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 никогда не будет выполнена.

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

Чтобы использовать подготовленные операторы, вы должны написать новую переменную, которая вызывает метод 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 "Connected successfully";
} catch (PDOException $error) {
  echo 'Connection error: ' . $error->getMessage();
}

// устанавливаем переменные для человека, которого мы хотим добавить в базу данных
$first_Name = "Test";
$last_Name = "Testing";
$email = "Testing@testing.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 record created successfully";
} else {
  echo "Unable to create record";
}

// на этом этапе вы можете изменить данные переменных и повторить процедуру для добавления новых данных в базу данных
$first_Name = "John";
$last_Name = "Smith";
$email = "john.smith@email.com";
$my_Insert_Statement->execute();

// выполняем снова, когда переменные изменились
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 соответствует "Test", связывает это значение и выполняет запрос.

Когда сценарий достигает второго метода execute(), он видит, что $first_Name теперь соответствует "John", связывает это значение и снова запускает запрос с новыми значениями. Важно помнить, что мы определили запрос один раз и повторно использовали его с разными данными в разных точках скрипта.

bindValue() – Этот метод оценивает данные, как только достигается bindValue(). Поскольку значение $first_Name было установлено на "Test" при достижении bindValue(), оно будет использоваться каждый раз, когда вызывается метод execute() для $my_Insert_Statement.

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

Если вы обновите скрипт, чтобы заменить bindParam на bindValue, вы дважды вставите в MySQL "Test Testing" в БД и "John Smith" будет проигнорирован.

Подтверждение вставки и решение проблем

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

Connect Successfully
New record created successfully

Однако бывают случаи, когда вставка новой записи будет с ошибкой при SQL вставке. Но не стоит беспокоиться, есть несколько способов исправить эти ошибки MySQL.

MySQLi

Если отображается сообщение об ошибке MySQLi, мы можем использовать следующие методы, чтобы исправить это. Например, давайте сделаем одну синтаксическую ошибку в нашем коде, если мы это сделаем, мы увидим что-то похожее на это:

Connect successfully
Error: INSERT INTO students {name, lastname, email} VALUES ('Test', 'Testing', 'Testing@testing.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 ('Test', 'Testing', 'Test@testingcom')' at line 1"

Как видите, первая часть кода в порядке, соединение установлено успешно, но наш 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; 
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"

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

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

Все эти ошибки можно легко исправить, следуя рекомендациям по сообщениям об ошибках или проверяя журнал ошибок.

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

Теперь вы знаете как использовать PHP для вставки данных в базу данных MySQL с помощью MySQLi и PDO.

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

Наверх ↑

Сергей Ермилов

15 сентября в 02:38 Посты, ,

Создаю веб-проекты, придумываю идеи, занимаюсь разработкой, оптимизирую и продвигаю сайты. Первые шаги в этом направлении сделал в 2008 году.

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

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

Вы можете использовать HTML теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Технологии

Статьи по теме Wordpress Статьи по теме PHP Статьи по теме Python Статьи по теме Javascript Статьи по теме Bootstrap Статьи по теме Git Статьи по теме Node JS