Как подключить бд к php
Перейти к содержимому

Как подключить бд к php

  • автор:

Работа с базой данных в PHP

Базы данных (БД, Database, db) широко применяются для структурирования и хранения информации. Они важны для успешной работы современных web-сайтов, причем используются для хранения данных и на тех сайтах, которые написаны на PHP. Таким образом, на практике databases применяют:

— для сохранения пользовательских данных, полученных с помощью форм регистрации;

— для проверки, существует ли конкретный аккаунт в системе, какие у него права доступа (access);

— для организации поиска по страницам сайта;

— для хранения комментариев;

— для хранения всевозможного контента (статей, изображений, медиафайлов) и многих других данных (data).

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

Краткое отступление

Традиционно, язык программирования PHP поддерживает работу с такой базой данных, как MySQL (это СУБД, поддерживающая структурированный язык запросов SQL). Для работы с базой данных MySQL в PHP встроены специальные функции, то есть необходимые возможности предусмотрены заранее. Эти функции позволяют:

— выполнять запросы и получать результаты;

— читать и записывать данные;

— успешно и эффективно работать с популярной СУБД.

При подключении к MySQL соответствующий сценарий исполняет запрос и показывает результат запроса. Но самое главное заключается в том, что для работы с СУБД MySQL разработчику не придется ничего специально устанавливать, так как все нужное будет сразу доступно и включено в стандартную поставку PHP.

Подключение к database на PHP

Выполнить подключение к серверу БД MySQL можно несколькими способами:

  • с помощью объектно-ориентированного подхода MySQLi;
  • с помощью процедурного подхода MySQLi;
  • используя технологию PDO;
  • используя способ подключения для старых версий PHP (имеются в виду версии до PHP 5).

Все вышеперечисленные варианты дают возможность выполнить ту же задачу. То есть выбор наиболее подходящего варианта осуществляется на основании:

— условий текущей разработки;

Но какой бы метод выбран не был, важно иметь основную информацию как о database, так и нюансах доступа (access) к ней. Что подразумевается под основной информацией:

  • сервер размещения. Когда разработка проекта ведется на локальном сервере, указывается значение localhost (аналогичная ситуация в большинстве случаев справедлива и тогда, когда вы пользуетесь хостингом);
  • loginиpasswordпользователя, имеющего доступ (access). Когда работы проводятся на локальном сервере, юзер может быть root и с пустым паролем;
  • имя базы данных.

Таким образом, заданный набор переменных в PHP выглядит следующим образом:

Работа с базой данных в PHP

MySQLi-подключение

При использовании этого способа создается экземпляр класса mysqli. В процессе создания подключения в параметрах задается информация о сервере, а также о доступах подключения и имени определенной БД, задаваемой переменными. Данные можно указать и строкой (row), то есть без использования переменных, однако вывод параметров в едином разделе либо конфигурационном файле повышает удобство работы с проектом.

Работа с базой данных в PHP

Процедурный подход к применению MySQLi

Для некоторых разработчиков более понятна и привычна работа в процедурном формате. Если это так, есть возможность задействовать тот же метод, однако с другой синтаксической реализацией. Когда может пригодиться подобное решение? К примеру, если осуществляется перенос старого MySQL-проекта.

$db = mysqli_connect($db_host, $db_user, $db_pass, $db_name)

or die(‘Error: подключение выполнено не было.’); // сообщение о том, что произойдет ошибка

// операции с database, к примеру:

$my_data = mysqli_query($db,»SELECT * FROM my_table»);

Подключаемся к БД средствами PHP Data Objects

Неплохое решение при работе с web-проектом — использование технологии PHP Data Objects (PDO). В чем плюс этой технологии? Да хотя бы в том, что появляется возможность работать с разными БД, не меняя основной код.

Работа с базой данных в PHP

Следует добавить несколько слов и о выборке данных в PDO. Делать это можно с помощью:

  1. Ассоциативного массива. PDO::FETCH_ASSOC обеспечивает возвращение массива с названиями столбцов в виде ключей.
  2. Объекта. PDO::FETCH_OBJ обеспечивает возвращение анонимного объекта со свойствами, которые соответствуют именам столбцов.

Метод для старых версий PHP

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

Работа с базой данных в PHP

Также давайте приведем пример добавления новой записи (insert into) в таблицу БД с помощью функции mysql_query() . Она может применяться также и для удаления, изменения и выборки данных посредством запроса SQL. Аргументом функции является строка с запросом. В результате возвращается идентификатор запроса.

Добавляем новую запись в нашу таблицу

die («Подключение к MySQL невозможно!»);

mysql_select_db ( $db ) or die («Нет возможности открыть $db»);

$query = «INSERT INTO books

VALUES (‘111-2222-33-4’, ‘Иванов Иван’,

‘Руководство по PHP’, ‘333’, ‘5’)»;

Какой тип соединения с сервером выбрать?

Выбор должен быть обоснованный (based). Важно понимать, что технология подключения подбирается программистом с учетом условий проекта, личных предпочтений, а также удобства применения. То есть надо быть в курсе проектных рамок и перспективы проекта. И не стоит применять устаревшие технологии и решения, когда существует возможность использовать что-нибудь более новое и эффективное.

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

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

Работа с базой данных в PHP

  • https://space-base.ru/library/php/podklyuchenie-bazy-dannyh-mysql-v-php;
  • https://htmlacademy.ru/tutorial/php/mysql;
  • https://htmlweb.ru/php/mysql.php.

Работа с MySQL через PDO

Для создания подключения к серверу базы данных в PDO применяется конструктор new PDO() , который принимает в качестве параметров настройки подключения:

new PDO("mysql:host=адрес_сервера;port=номер_порта;dbname=имя_базы_данных", "имя_пользователя", "пароль")
  • Сначала указывается строка подключечения, которая состоит из ряда настроек. Первая настройка — название драйвера базы данных. Так, в данном случае подключение осуществляется к MySQL, то тип баз данных будет mysql: . Далее идет настройка host , которая задает хост сервера, например, host=localhost (если сервер MySQL запущен локально). Затем дополнительно можно указать номер порта через параметр port . Если он не указан, то используется порт по умолчанию — для mysql это 3306. И далее идет настройка dbname , которая устанавливает имя базы данных. Кроме этих настроек строка подключения может включать еще ряд других, но это самые основные.
  • Второй параметр задает имя пользователя MySQL
  • Третий параметр устанавливает пароль для выше указанного пользователя

При успешном подключении вызов конструктора new PDO() возвращает созданный объект PDO, который представляет установленное подключение и через который мы сможем взавмодействовать с базой данных. Однако если установка подключения прошла неудачно (например, сервер базы данных недоступен, указаны неправильные имя пользователя и/или пароль, какая-то еще ошибка), то вызов конструктора генерирует исключение. Соответственно вызов данного конструктора лучше помещать в конструкцию try..catch

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

 catch (PDOException $e) < echo "Connection failed: " . $e->getMessage(); > ?>

Здесь производится подключение к локальному серверу, поэтому в строке подключения параметр host имеет значение «localhost». Поскольку база данных пока не важна, то параметр dbname не указан. Подключение производится для пользователя — пользователя «root», для которого установлен пароль «mypassword».

«root» — это пользователь по умолчанию, который существует для сервера MySQL. А «mypassword» — пароль, установленный для этого пользователя. Естественно в каждом конкретном случае пароль для этого пользователя может отличаться. Однако если на сервере MySQL созданы другие пользователи, то можно указывать этих пользователей и их пароли.

При успешном подключении созданный объект PDO будет сохранен в переменную $conn , через которую мы затем сможем взаимодействовать с MySQL:

$conn = new PDO("mysql:host=localhost", "root", "mypassword");

Если произойдет ошибка, то будет сгенерировано исключение типа PDOException . Как и у других классов исключений с помощью метода getMessage() мы можем получить сообщение об ошибке.

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

Database connection established

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

Connection failed: SQLSTATE[HY000] [1045] Access denied for user ‘root’@’localhost’ (using password: YES)

Установка режима вывода ошибок

Если при взаимодействии с MySQL произойдет ошибка, то, как правило, ожидается, что мы получим сообщение об ошибке. Однако реальное поведение зависит от редима вывода ошибок, который установлен для объекта PDO. Режим вывода ошибок задается с помощью атрибута PDO::ATTR_ERRMODE , который может принимать следующие значения:

  • PDO::ERRMODE_SILENT : PDO просто устанавливает код ошибки. Для получения которого и для получения информации об ошибке по которому необходимо было вызывать специальные методы. Поскольку при этом режиме необходимо вызывать дополнительные методы, то этот способ обычно рассматривался как не самый удобный. Он был значением по умолчанию до версии PHP 8.0.
  • PDO::ERRMODE_WARNING : PDO генерирует сообщение типа E_WARNING . Обычно применяется при отладке или тестировании
  • PDO::ERRMODE_EXCEPTION : PDO передает информацию об ошибке в объект PDOException, благодаря чему через блок catch в конструкции try..catch мы можем отловить ошибку и получить информацию об этом исключении. Этот режим применяется как режим по умолчанию начиная с версии PHP 8.0.

Если мы хотим получать информацию об ошибке через исключение PDOException и обрабатывать его в блоке catch , то нам нужно значение PDO::ERRMODE_EXCEPTION . В PHP 8.0 и выше это значение применяется по умолчанию, однако, если версия ниже 8.0, то необходимо это значение установить явным образом с помощью метода setAttribute() объекта PDO:

try < $conn = new PDO("mysql:host=localhost", "root", "mypassword"); // установка режима вывода ошибок $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "Database connection established"; > catch (PDOException $e) < echo "Connection failed: " . $e->getMessage(); >

Закрытие подключения

После завершения работы скрипта PHP автоматически закрывает открытые подключения к базе данных. Но может потребоваться закрыть подключение еще в процессе работы скрипта. В этом случае объекту PDO можно присвоить значение null :

$conn = null; // отключаемся от сервера базы данных

Шаг 3. Подтверждение концепции: подключение к SQL с помощью PHP

Эта функция OpenConnection вызывается перед выполнением всех последующих функций.

 function OpenConnection() < $serverName = "tcp:myserver.database.windows.net,1433"; $connectionOptions = array("Database"=>"AdventureWorks", "Uid"=>"MyUser", "PWD"=>"MyPassword"); $conn = sqlsrv_connect($serverName, $connectionOptions); if($conn == false) die(FormatErrors(sqlsrv_errors())); return $conn; > 

Шаг 2. Выполнение запроса

Функция sqlsrv_query может использоваться для извлечения результирующего набора из запроса к базе данных SQL. Эта функция фактически принимает любой запрос и объект подключения, а затем возвращает результирующий набор для итеративного перебора с помощью sqlsrv_fetch_array().

 function ReadData() < try < $conn = OpenConnection(); $tsql = "SELECT [CompanyName] FROM SalesLT.Customer"; $getProducts = sqlsrv_query($conn, $tsql); if ($getProducts == FALSE) die(FormatErrors(sqlsrv_errors())); $productCount = 0; while($row = sqlsrv_fetch_array($getProducts, SQLSRV_FETCH_ASSOC)) < echo($row['CompanyName']); echo("
"); $productCount++; > sqlsrv_free_stmt($getProducts); sqlsrv_close($conn); > catch(Exception $e) < echo("Error!"); >>

Шаг 3. Вставка строки

В этом примере показано, как безопасно выполнить инструкцию INSERT и передать параметры. Значения параметров защищают приложение от внедрения кода SQL.

 function InsertData() < try < $conn = OpenConnection(); $tsql = "INSERT SalesLT.Product (Name, ProductNumber, StandardCost, ListPrice, SellStartDate) OUTPUT" . " INSERTED.ProductID VALUES ('SQL Server 1', 'SQL Server 2', 0, 0, getdate())"; //Insert query $insertReview = sqlsrv_query($conn, $tsql); if($insertReview == FALSE) die(FormatErrors( sqlsrv_errors())); echo "Product Key inserted is :"; while($row = sqlsrv_fetch_array($insertReview, SQLSRV_FETCH_ASSOC)) < echo($row['ProductID']); >sqlsrv_free_stmt($insertReview); sqlsrv_close($conn); > catch(Exception $e) < echo("Error!"); >> 

Шаг 4. Откат транзакции

Этот пример кода демонстрирует использование транзакций, в которых можно:

  • начать транзакцию;
  • вставить строку данных, обновить другую строку данных;
  • зафиксировать транзакцию, если запросы на вставку и обновление выполнены успешно, или откатить транзакцию, если один из запросов вызвал ошибку.
 function Transactions() < try < $conn = OpenConnection(); if (sqlsrv_begin_transaction($conn) == FALSE) die(FormatErrors(sqlsrv_errors())); $tsql1 = "INSERT INTO SalesLT.SalesOrderDetail (SalesOrderID,OrderQty,ProductID,UnitPrice) VALUES (71774, 22, 709, 33)"; $stmt1 = sqlsrv_query($conn, $tsql1); /* Set up and execute the second query. */ $tsql2 = "UPDATE SalesLT.SalesOrderDetail SET OrderQty = (OrderQty + 1) WHERE ProductID = 709"; $stmt2 = sqlsrv_query( $conn, $tsql2); /* If both queries were successful, commit the transaction. */ /* Otherwise, rollback the transaction. */ if($stmt1 && $stmt2) < sqlsrv_commit($conn); echo("Transaction was commited"); >else < sqlsrv_rollback($conn); echo "Transaction was rolled back.\n"; >/* Free statement and connection resources. */ sqlsrv_free_stmt( $stmt1); sqlsrv_free_stmt( $stmt2); > catch(Exception $e) < echo("Error!"); >> 

mysqli_select_db

Замечание:

Эта функция используется только для смены базы данных во время подключения. Вы можете выбрать базу данных, передав её четвёртым параметром в функции mysqli_connect() .

Список параметров

Только для процедурного стиля: объект mysqli , который вернула функция mysqli_connect() или функция mysqli_init() .

Имя базы данных.

Возвращаемые значения

Возвращает true в случае успешного выполнения или false в случае возникновения ошибки.

Ошибки

Если уведомления об ошибках mysqli включены ( MYSQLI_REPORT_ERROR ) и запрошенная операция не удалась, выдаётся предупреждение. Если, кроме того, установлен режим MYSQLI_REPORT_STRICT , вместо этого будет выброшено исключение mysqli_sql_exception .

Примеры

Пример #1 Пример использования mysqli::select_db()

mysqli_report ( MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT );
$mysqli = new mysqli ( «localhost» , «my_user» , «my_password» , «test» );

/* получаем имя текущей базы данных по умолчанию */
$result = $mysqli -> query ( «SELECT DATABASE()» );
$row = $result -> fetch_row ();
printf ( «База данных по умолчанию: %s.\n» , $row [ 0 ]);

/* изменяем базу данных по умолчанию на «world» */
$mysqli -> select_db ( «world» );

/* получаем имя текущей базы данных по умолчанию */
$result = $mysqli -> query ( «SELECT DATABASE()» );
$row = $result -> fetch_row ();
printf ( «База данных по умолчанию: %s.\n» , $row [ 0 ]);

mysqli_report ( MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT );
$link = mysqli_connect ( «localhost» , «my_user» , «my_password» , «test» );

/* получаем имя текущей базы данных по умолчанию */
$result = mysqli_query ( $link , «SELECT DATABASE()» );
$row = mysqli_fetch_row ( $result );
printf ( «База данных по умолчанию: %s.\n» , $row [ 0 ]);

/* изменяем базу данных по умолчанию на «world» */
mysqli_select_db ( $link , «world» );

/* получаем имя текущей базы данных по умолчанию */
$result = mysqli_query ( $link , «SELECT DATABASE()» );
$row = mysqli_fetch_row ( $result );
printf ( «База данных по умолчанию: %s.\n» , $row [ 0 ]);

Результат выполнения приведённых примеров:

База данных по умолчанию: test. База данных по умолчанию: world.

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

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