Перейти к содержимому

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

  • автор:

Взаимодействие с MySQL через mysqli

Библиотека MySQLi представляет альтернативный способ подключения к базе данных MySQL. Причем он предоставляет два подхода: процедурный и объектно-ориентированный. Рассмотрим применение обоих подходов.

Создание подключения в объектно-ориентированном стиле

Для создания подключения к серверу MySQL в объектно-ориентированном стиле применяется конструктор mysqli() , в который передаются настройки подключения — адрес сервера MySQL, имя пользователя и пароль:

$conn = new mysqli("адрес_сервера", "имя_пользователя", "пароль");

Конструктор создает объект mysqli , через который осуществляется взаимодействие с базой данных. Однако если подключение не удалось установить, то устанавливается свойство $conn->connect_error , которое содержит информацию об ошибке. Поэтому перед взаимодействием с MySQL мы можем проверить успешность подключения:

if ($conn->connect_error) < die("Connection failed: " . $conn->connect_error); >

После окончания выполнения скрипта подключение к MySQL закрывается автоматически. Однако мы можем закрыть подключение и до окончания работы скрипта с помощью метода close() :

con ->close();

Теперь соединим все вместе выполним подключение к локальному серверу MySQL:

connect_error)< die("Ошибка: " . $conn->connect_error); > echo "Подключение успешно установлено"; $conn->close(); ?>

Поскольку подключение производится к локальному серверу MySQL, то первый параметр конструктора mysqli — строка «localhost». Второй параметр в качестве имени пользователя использует «root» — пользователь, который содается на сервере MySQL по умолчанию. И третий параметр — пароль пользователя «root».

Подключение в процедурном стиле

Для подключения в процедурном стиле применяется функция mysqli_connect , которая принимает адрес сервера, имя и пароль пользователя:

$conn = mysqli_connect("адрес_сервера", "имя_пользователя", "пароль");

Функция возвращает объект, который используется для подключения к базе данных. Однако если подключение не удалось установить, то функция возвращает false . Поэтому перед взаимодействием с MySQL мы можем проверить успешность подключения:

if (!$conn)

С помощью функции mysqli_connect_error() можно получить информацию об ошибке.

Для закрытия подключения применяется функция mysqli_close() , которая в качестве параметра принимает ранее созданный объект подключения:

mysqli_close($conn);
 echo "Подключение успешно установлено"; mysqli_close($conn); ?>

Подключение базы данных MySQL в PHP

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

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

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

В любом случае, какой бы мы не применяли метод, необходимо иметь основную информацию о БД и доступах к ней:

  • сервер, на котором размещена БД. Если вы разрабатываете проект на локальном сервере (а также в большинстве случаев, пользуясь хостингом), указываем значение localhost;
  • логин и пароль пользователя с доступом нужной БД (если работа ведется на локальном сервере, пользователь может быть root с пустым паролем);
  • имя БД, с которой планируется выполнять операции.

В итоге имеем набор заданных переменных для каждого из примеров ниже:

$db_host = "localhost"; // сервер $db_user = "root"; // имя пользователя $db_pass = ""; // пароль $db_name = "my_db"; // название базы данных 

Объектно-ориентированный метод MySQLi

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

// выполнение подключения $db = new mysqli($db_host, $db_user, $db_pass, $db_name); // проверка на успешное подключение и вывод ошибки, если оно не выполнено if ($db->connect_error) < echo "Нет подключения к БД. Ошибка:".mysqli_connect_error(); exit; >// операции с БД, например: $my_data = $db->query("SELECT * FROM my_table"); // завершение подключения $db->close(); 

Процедурный подход к использованию MySQLi

Если для вас более привычен и понятен порядок работы в процедурном формате, то можно использовать этот же метод, но в ином синтаксисе. Такое решение будет удобно, в случае переноса старого проекта, реализованного на MySQL, на версию PHP. Будет меньше изменений в коде.

// выполнение подключения $db = mysqli_connect($db_host, $db_user, $db_pass, $db_name) or die('Ошибка: подключение не выполнено.'); // сообщение об ошибке // операции с БД, например: $my_data = mysqli_query($db,"SELECT * FROM my_table"); // завершение подключения mysqli_close($db); 

Подключение к БД средствами PDO

Хорошим решением для работы с веб-проектами является применение технологии PDO (PHP Data Objects). Преимущество технологии в том, что с ее помощью можно работать с различными БД, не меняя основной код проекта.

// выполнение подключения try < $db = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); > catch(PDOException $e) < // обработчик в случае ошибки подключения echo "Ошибка: " . $e->getMessage(); > // операции с БД, например: $my_data = $db->query("SELECT * FROM eddb_projects"); // завершение подключения $db = null; 

Подключение MySQL (для старых версий PHP)

Если по какой-то причине, необходима работа в старых версиях PHP или работа с древними проектами, стоит иметь представление о таком подходе. Реализация подобна процедурной MySQLi, т.к. является ее предыдущей версией.

// выполнение подключения $db = mysql_connect($db_host, $db_user, $db_pass) or die('Ошибка: подключение не выполнено.'); // сообщение об ошибке подключения mysql_select_db($db_name, $db) or die('Ошибка: БД не найдена.'); // операции с БД, например: $my_data = mysql_query("SELECT * FROM my_table"); // завершение подключения mysql_close($db); 

Какой тип подключения к БД выбрать?

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

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

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

Ошибки кодировки в результатах примеров

Задачей данной статьи было описание подключений к БД средствами PHP. Чтобы не добавлять лишние строки кода, в примерах используется только код, относящийся к теме. Поэтому если, вы копируете пример и в результате видите непонятные символы вместо сообщений об ошибках подключения кириллицей, стоит указать кодировку. Добавьте в начало кода строку:

header("Content-Type: text/html; charset=utf-8");

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

Сервер MySQL поддерживает различные способы передачи данных. Соединения могут использовать протоколы TCP/IP, сокеты Unix-доменов или именованные пайпы Windows.

Имя хоста localhost имеет особое значение. Оно используется только в сокетах Unix доменов. Чтобы открыть TCP/IP-соединение с локальным хостом, необходимо использовать 127.0.0.1 вместо имени хоста localhost .

Пример #1 Специальное назначение localhost

$mysqli = new mysqli ( «localhost» , «user» , «password» , «database» );

echo $mysqli -> host_info . «\n» ;

$mysqli = new mysqli ( «127.0.0.1» , «user» , «password» , «database» , 3306 );

echo $mysqli -> host_info . «\n» ;

Результат выполнения этого примера:

Localhost via UNIX socket 127.0.0.1 via TCP/IP

Умолчания для параметров соединений

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

Пример #2 Задание значений по умолчанию

mysqli.default_host=192.168.2.27 mysqli.default_user=root mysqli.default_pw="" mysqli.default_port=3306 mysqli.default_socket=/tmp/mysql.sock

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

Встроенные библиотечные значения по умолчанию для параметров соединения

Если имя хоста не задано или передана пустая строка, клиентская библиотека использует для подключения к Unix-сокету хоста localhost . Если сокет не задан или передана пустая строка, и при этом запрошено подключение к Unix-сокету, библиотека попытается подключиться к сокету /tmp/mysql.sock .

В Windows-системах, если в качестве имени хоста передаётся . , библиотека попытается открыть соединение на основе именованного пайпа. В этом случае имя сокета будет воспринято как имя пайпа. Если имя сокета не задано, то будет использовано значение \\.\pipe\MySQL .

Если соединение не использует ни сокет Unix-домена, ни именованный пайп Windows, и при этом не задан порт для подключения, библиотека использует номер порта 3306 .

В драйвере mysqlnd и клиентской библиотеке MySQL (libmysqlclient) заложена та же логика определения умолчаний.

Настройки соединения

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

Когда требуется задать настройки соединения, операция подключения выполняется в три этапа: функцией mysqli_init() или mysqli::__construct() создаётся дескриптор подключения, затем подключение настраивается с помощью функции mysqli::options() , и наконец устанавливается сетевое соединение с сервером посредством функции mysqli::real_connect() .

Объединение подключений в пул

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

Каждый PHP-процесс использует свой пул подключений mysqli. В зависимости от конфигурации веб-сервера, PHP-процесс может обслуживать один или несколько запросов. Соответственно, соединение из пула могут последовательно использовать несколько скриптов.

Постоянное соединение

Новое подключение создаётся, только если в пуле не найдётся свободного подключения с теми же данными хоста, имени пользователя, пароля, сокета, порта и базы данных по умолчанию. Механизм постоянных соединений можно включать и выключать PHP директивой mysqli.allow_persistent. Максимальное количество соединений, которые может открыть скрипт, ограничено значением mysqli.max_links. Максимальное количество соединений, которые может открыть один PHP-процесс, ограничено значением mysqli.max_persistent. Следует заметить, что веб-сервер может порождать множество PHP процессов.

Главный недостаток постоянных подключений заключается в том, что перед повторным использованием их состояние не сбрасывается к изначальному. Например, открытые и незавершённые транзакции не будут автоматически откатываться. Также, если во время нахождения соединения в пуле для процесса изменились какие-либо разрешения или уровни доступа, этот факт никак не отразится на подключении при его извлечении из пула. Такое поведение может привести к нежелательным результатам. Хотя, с другой стороны, название постоянный можно рассматривать, как обещание, что подключение и правда останется в том состоянии, в котором оно было помещено в пул.

Модуль mysqli поддерживает обе интерпретации термина постоянное соединение: состояние соединения может сохраняться, а может и сбрасываться в изначальное. По умолчанию при извлечении из пула, соединение сбрасывается. mysqli делает это неявным вызовом функции mysqli::change_user() каждый раз, когда подключение используется повторно. С точки зрения пользователя подключение выглядит, как только что созданное.

Однако, вызов функции mysqli::change_user() довольно дорогостоящая операция. Для улучшения быстродействия можно перекомпилировать модуль с установленным флагом MYSQLI_NO_CHANGE_USER_ON_PCONNECT .

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

Смотрите также

  • mysqli::__construct()
  • mysqli_init()
  • mysqli::options()
  • mysqli::real_connect()
  • mysqli::change_user()
  • $mysqli::host_info
  • MySQLi Configuration Options
  • Persistent Database Connections

Подключение MySQL к PHP

project author

Если Вам понравился данный материал, поделитесь им с вашими друзьями в соц сетях

В предыдущих материалах были описаны установка и запуск локального веб-сервер Apache на ОС Microsoft Windows 7, а так же, к веб-серверу был подключен модуль языка программирования PHP.

Теперь, для полноценной разработки динамичных сайтов на своем локальном вер-сервере, нам необходимо установить СУБД (систему управления базами данных) MySQL. Как выбрать и где скачать необходимый для этого дистрибутив было описано в материале Что необходимо для установки веб-сервера?

Создание и настройка конфигурационного файла my.ini

Итак, имея в наличии архив с необходимой версией MySQL, создадим в корне локального диска «C:\» директорию «mysql», и распакуем в нее содержимое архива.

Перейдем в директорию «C:\mysql\» и найдем файл: «my-default.ini». Это файл — пример конфигурационного файла MySQL. Сделайте копию файла «my-default.ini» с именем «my.ini». В дальнейшем этот файл, будет основным конфигурационным файлом настройки MySQL.

Открываем в текстовом редакторе конфигурационный файл MySQL «C:\mysql\my.ini».

Найдем в конфигурационном файле директивы:

# basedir = ….. # datadir = ….. # port = …..

Раскомментируем их и пропишем им следующие значения:

basedir = "C:\mysql" datadir = "C:\mysql\data" port = "3306" character-set-server = utf8

Установка сервиса MySQL

Далее необходимо установить сервис MySQL как службу. Для этого нам понадобится командная строка (Командная строка должна быть запущена от имени администратора). Ранее, в материале Установка Apache 2.4, с ее помощью мы устанавливали службу Apache.

Открываем командную строку от имени администратора.

C:\Windows\system32>

Теперь необходимо перейти в директорию СУБД MySQL «C:\mysql\bin» где находится файл «mysqld.exe». Для этого используем команду «cd» и указываем полный путь до данной директории.

C:\Windows\system32>cd C:\mysql\bin C:\mysql\bin>

Для того, что бы установить сервис MySQL как службу, необходимо выполнить команду

C:\mysql\bin>mysqld.exe install

или устанавливаем службу указав ей собственное имя, а не использовать имя службы по умолчанию

C:\mysql\bin>mysqld.exe install name_service C:\mysql\bin>mysqld.exe install "name service"

При удачном выполнение установки получаем примерно такой ответ:

Service successfully installed.

Перевод:
Сервис (служба) успешно установлен.

Управление службой MySQL

После установки сервиса MySQL нам необходимо уметь управлять его запуском и остановкой.

Для этого, по аналогии с управлением службой Apache, Вы можете использовать окно списка служб («Пуск» → пункт «Панель управления» → «Администрирование» → «Службы») или командную строку.

Рассмотрим команды управления службой MySQL, через командную строку.

C:\Windows\system32>net start MySQL или C:\Windows\system32>net start "name service"
C:\Windows\system32>net stop MySQL или C:\Windows\system32>net stop "name service"

Управлять службой MySQL, как впрочем и всеми другими службами в ОС Windows, можно используя в командной строке команду «net». Рассмотрим несколько примеров.

получаем список служб

C:\Windows\system32>net start
C:\Windows\system32>net start MySQL или C:\Windows\system32>net start "name service"
C:\Windows\system32>net stop MySQL или C:\Windows\system32>net stop "name service"

Работа в командной строке mysql

Для запуска консоли mysql необходимо перейти в директорию «C:\mysql\bin» где находится файл «mysql.exe». Для этого используем команду «cd» и указываем полный путь до директории где находится файл «mysql.exe».

C:\Windows\system32>cd C:\mysql\bin C:\mysql\bin>

запускаем консоль mysql

C:\mysql\bin\mysql -u root или C:\mysql\bin\mysql.exe -u root

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

mysql>

Сразу же сообщаю Вам, что все sql-команды которые вводятся в командной строке, должны завершаться «;» или «\g»

Теперь давайте посмотрим как работать в консоли mysql, для этого выполним ряд стандартных команд.

выведем информацию о mysql

mysql> status;

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

mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | +--------------------+

в первой строке вводим команду «show databases», ставим точка с запятой (это говорит серверу, что команда закончена) и нажимаем Enter
получаем список баз данных

выбираем базу данных для работы

mysql> use mysql; Database changed

В первой строке выбираем базу данных для работы c именем «mysql» и нажимаем Enter
Во второй строке получаем сообщение, что база данных выбрана

выводим список таблиц выбранной базы данных

mysql> show tables; +--------------------+ | Tables_in_mysql | +--------------------+ | columns_priv | | db | | . | +--------------------+ N rows in set (0.00 sec)

в первой строке вводим команду «show tables», ставим точка с запятой и нажимаем Enter
получаем список таблиц

выйти из сеанса работы

mysql> exit;

Настраиваем и проверяем взаимодействие PHP и MySQL

После успешной установки и запуска службы MySQL, нам необходимо проверить взаимодействие PHP с MySQL.

В пункте «Работа с конфигурационным файлом php.ini» материала Подключение PHP к Apache нами был рассмотрен пример подключения динамически загружаемых расширений. Для дальней работой с MySQL в конфигурационном файле php «C:\php\php.ini» необходимо подключить следующие расширения (после подключения расширений необходимо перезагрузить веб-сервер):

в файле php.ini найдем блок Dynamic Extensions (Динамические Расширения)

;;;;;;;;;;;;;;;;;;;;;; ; Dynamic Extensions ; ;;;;;;;;;;;;;;;;;;;;;; . extension=php_mysql.dll extension=php_mysqli.dll extension=php_pdo_mysql.dll .

раскомментируем необходимые расширения

Считаю важным отметить, что необходимо понимать в чем отличие расширений php_mysql.dll от php_mysqli.dll, для этого приведу немного теории.

Что такое расширение php_mysql

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

Что такое расширение php_mysqli

Расширение mysqli, или как его еще называют улучшенное (improved) MySQL расширение, было разработано, чтобы дать возможность программистам в полной мере воспользоваться функционалом MySQL сервера версий 4.1.3 и выше. Расширение mysqli включается в поставку PHP версий 5 и выше.

Для получения более подробной информации перейдите по ссылке http://php.net/mysqli

После небольшой теории, давайте перейдем к практике, проверим взаимодействие PHP с MySQL. Для этого создаем в корневой директории управления сайтами «C:\Apache24\htdocs\» файл c именем «db.php», открываем его в текстовом редакторе и добавим по очереди несколько примеров кода указанных ниже:

Пример процедурного стиля mysqli

", mysqli_connect_errno()); printf("Нет соединения с сервером: описание ошибки - %s\n
", mysqli_connect_error()); exit(); > else < // иначе printf("Информация о хосте: %s\n
", mysqli_get_host_info($connect)); printf("
Базы данных:
"); $db_list = mysqli_query("SHOW DATABASES"); // выводим в цикле имена баз данных while ($row = mysqli_fetch_assoc($db_list, MYSQL_ASSOC)) < print_r($row['Database']); print_r("\n
"); > printf("
Таблицы базы данных $db_name :
"); $tables_list = mysqli_query("SHOW TABLES FROM $db_name"); // выводим в цикле имена таблиц баз данных $db_name while($row = mysqli_fetch_row($tables_list, MYSQL_NUM)) < print_r($row[0]); print_r("\n
"); > > // закрываем соединение mysqli_close($connect); ?>

Пример процедурного стиля mysql

", mysql_connect_errno()); printf("Нет соединения с сервером: описание ошибки - %s\n
", mysql_connect_error()); exit(); > else < // иначе printf("Информация о хосте: %s\n
", mysql_get_host_info($connect)); printf("
Базы данных:
"); $db_list = mysql_query("SHOW DATABASES"); // выводим в цикле имена баз данных while ($row = mysql_fetch_assoc($db_list)) < print_r($row['Database']); print_r("\n
"); > printf("
Таблицы базы данных $db_name :
"); $tables_list = mysql_query("SHOW TABLES FROM $db_name"); // выводим в цикле имена таблиц баз данных $db_name while($row = mysql_fetch_row($tables_list)) < print_r($row[0]); print_r("\n
"); > > // закрываем соединение mysql_close($connect); ?>

Сохраняем файл и открываем в браузере страницу http://localhost/db.php.

По итогам изучения данного материала мы рассмотрели процесс установки СУБД (системы управления базами данных) MySQL.

  • Подключение PHP к Apache
  • Установка и настройка phpMyAdmin

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

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