Подключение к mysql через php. Как создать подключение к базе данных в PHP? Как создать подключение к базе данных phpmyadmin

Вопрос достаточно популярный среди новичков и не уделить этому отдельную статью было бы неправильно. Как с помощью PHP создать подключение к базе данных? Скажу сразу, средств PHP вполне достаточно для полноценной работы с базами и взаимодействию с MySQL. Теперь попытаемся подключиться!

Что нужно для подключения PHP к MySQL?

1. Установленный СУБД и созданная рабочая база данных. Например, в MySQL (Что такое СУБД и MySQL?).
2. Учётная запись пользователя для MySQL с соответствующими правами (Что такое права и привилегии в MySQL?)
3. Соответственно сервер с установленным PHP

Если не выполнить один из этих пунктов, то подключиться не получится.

Алгоритм взаимодействия PHP и MySQL

1. Подключение к БД
2. Отправка запроса и получение результата
3. (Желательно) Закрытие подключения

Теперь подключаемся к базе данных средствами PHP:

Код PHP

$db = mysql_connect("localhost", "Admin", "pass"); // данные пользователя
mysql_select_db ("baseName",$db); // выбираем к какой БД подключаемся
?>
Как Вы видите, для подключения указываются четыре параметра:

1. Имя хоста. Во многих случаях достаточно указать localhost (на этом же хостинге).
2. Имя пользователя, которого Вы зарегистрировали для использования MySQL.
3. Пароль пользователя, которого Вы зарегистрировали для использования MySQL.
4. Название Базы Данных, к которой хотим подключиться. Соответственно у пользователя, которого мы указали, должны быть права для работы в этой БД.

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

Ещё один вид подключения:

Код PHP

$host="localhost"; /*хост*/
$user="admin"; /*Имя пользователя*/
$password="12345"; /*Пароль пользователя*/
$db="baseName"; /*Название базы данных*/

Mysql_connect($host, $user, $password); /*Подключение к серверу*/
mysql_select_db($db); /*Подключение к базе данных на сервере*/
?>
Тут я наглядно создаю переменные с примером данных по пользователю и хосту, а потом создаём подключение.

Как прервать (закрыть) подключение к БД в PHP?

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

Код PHP

$user="admin";
$password="12345";
$db="baseName";

// если произошла ошибка
mysql_connect($host, $user, $password) or die("MySQL сервер недоступен!".mysql_error());
mysql_select_db($db) or die("Нет соединения с БД".mysql_error());
?>
Очень важно также то, что проработка сценария прекратится, что убережёт Вас от массы некорректных данных.

Поздравляю! Теперь Вы знаете как подключиться к БД в PHP и закрыть соединение!

Спасибо за внимание!

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

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

Кстати, в Web`е разносят сервер базы данных и web-сервер только в тех случаях, когда мощности одного сервера не хватает. Арендуется выделенный сервер и выноситься на него база данных. Хотелось бы уточнить, что делать это разумно только в пределах одного ДЦ.

Разрешаем подключаться к MySQL удаленно

В конфигурационном файле самого MySQL есть параметр bind-address , который отвечает за это, поэтому:

  1. открываем конфигурационный файл для редактирования:
    sudo nano /etc/mysql/my.cnf
  2. комментируем строку:
    # bind-address = 127.0.0.1
  3. перезапускаем MySQL:
    sudo service mysql restart

Закомментировать эту строку равносильно тому, что присвоить IP-адрес 0.0.0.0 , то есть разрешить подключаться всем. Указать 2 IP-адреса в этой строчке нельзя. Если нужно ограничить подключение к серверу MySQL, нужно использовать возможности iptables.

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

Mysql -u root -p

И командой создаем пользователя:

GRANT ALL PRIVILEGES ON *.* TO "новый_пользователь"@"удаленный_адрес" IDENTIFIED BY "пароль" WITH GRANT OPTION;

Эта строчка создает пользователя с неограниченными правами, что делать не совсем правильно. Правильнее максимально ограничить доступ пользователя, который подключается удаленно. Поэтому команда может выглядеть так:

GRANT SELECT,INSERT,DELETE,UPDATE,CREATE,ALTER ON "имя_базы".* TO "новый_пользователь"@"удаленный_адрес" IDENTIFIED BY "пароль" WITH GRANT OPTION;

Этой командой мы ограничили полномочия пользователя только одной базой данных и действиями с ней.

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

  • ALL PRIVILEGES – все права на указанный объект за исключением назначения прав на этот объект;
  • CREATE – право на создание таблицы;
  • ALTER – право на изменение таблицы;
  • DROP – право на уничтожение таблицы;
  • LOCK TABLES – право на блокировку таблицы;
  • CREATE TEMPORARY TABLES – право на создание временных таблиц;
  • CREATE ROUTINE – право на создание хранимых процедур и функций;
  • ALTER ROUTINE – право на изменение или уничтожение хранимых процедур и функций;
  • CREATE VIEW – право на создание представления;
  • TRIGGER – право на создание и уничтожение триггеров;
  • INDEX – права на создание и уничтожение индексов;
  • EXECUTE – право на выполнения хранимых процедур и функций;
  • EVENT – право на создание событий;
  • CREATE USER – права на создание, уничтожение, переименование пользователя и снятия все прав. Назначается только на глобальном уровне;
  • SELECT – право на выборку;
  • DELETE – право на удаление;
  • INSERT – право на вставку;
  • UPDATE – право на обновление;
  • FILE – право на использование команд SELECT … INTO OUTFILE и LOAD DATA INFILE ;
  • PROCESS – право на просмотр всех процессов командой SHOW PROCESSLIST ;
  • SHOW DATABASES – право на просмотр списка схем;
  • SHOW VIEW – право на просмотр списка представлений;
  • SHUTDOWN – право на закрытие.

В этой статье сегодня поговорим о создании подключения к базе данных и обсудим какой вариант лучше использовать процедурный или объектно - ориентированный. Для начала давайте разберем на каком уровне мы находимся, если это уровень полного новичка, тогда мой совет без исключения начать использовать процедурный стиль подключения к базе данных. Ранее я писал статью по этой теме на своем блоге, подробнее о процедурном стиле подключения к базе данный читайте в статье: «Как подключиться к MySQL используя PHP» . Если за плечами есть уже какой нибудь опыт работы с процедурным стилем подключения к базе данных, тогда Вас наверное как и меня мои проекты просто взяли и заставили использовать объектно - ориентированный подход.

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

Создадим два файла:

  • index.php;
  • database.class.php;

Думаю, мы не маленькие уже дети и знаем, что нам нужно для работы с PHP файлами. Установленный веб - сервер Apache, PHP, СУБД MySQL и знает куда эти файлы положить - (для тех, кто не знает или забыл).

Файл в котором храниться класс я выношу в отдельный файл и именую его в формате: имя класса.class.php и я знаю, что храниться у меня в этом файле. Когда в проекте много классов, можно потеряться, поэтому рекомендую именовать файлы с классами в формате описанным выше.

Файл database.class.php:

Давайте сейчас разберем, что было создано на данном шаге. С помощью ключевого слова «class», имени класса - DataBase и фигурный скобок мы создали тело класса. В созданном классе мы создали два свойства, в $mConnect - где храниться результат соединения с базой данных и $mSelectDB - где храниться результат выбора базы данных. Вы могли заметить ключевые слова в каждом свойстве - public и static. О чем они говорят? Public означает, что свойство доступно из вне класса, а static дает возможность обращаться или вызывать свойство без создания экземпляра класс, что очень часто удобно в работе.

Добавим метод Connect() для создания соединения с базой:

".mysql_error()."

"; exit(); return false; } // Возвращаем результат return self::$mConnect; } } ?>

  • $host - IP адрес сервера, на локальном ПК это localhost;
  • user - имя пользователя базы данных;
  • $pass - пароль пользователя базы данных;
  • $name - имя базы данных к которой подключаемся;

Функция mysql_connect() создает соединение с базой данных, результат выполнения сохраняет в $mConnect. Далее идет проверка конструкцией IF: Если подключение не прошло успешно, вывести сообщение об ошибке… Иначе PHP проигнорирует блок IF и пойдет дальше выбирать базу данных. Функция mysql_select_db() производит выбор имени базы данных, если в базе не существует запрашиваемой база данных, в этом случае программа сообщит пользователю об ошибке. Если все пройдет успешно, соединение с базой данных вернет return.

Добавляем метод Close():

К сожалению, не удалось подключиться к серверу MySQL

"; exit(); return false; } // Пробуем выбрать базу данных self::$mSelectDB = mysql_select_db($name, self::$mConnect); // Если база данных не выбрана, вывести сообщение об ошибке.. if(!self::$mSelectDB) { echo "

".mysql_error()."

"; exit(); return false; } // Возвращаем результат return self::$mConnect; } // Метод закрывает соединение с базой данных public static function Close() { // Возвращает результат return mysql_close(self::$mConnect); } } ?>

Следующий и уже последний в этом классе метод Close() - закрывает соединение с базой данных, функция mysql_close() закрывает соединение с сервером MySQL и возвращает результат.

Файл index.php:

С помощью функции define() мы создали константы, для хранения параметров соединения с базой данных. Require_once подключает наш класс DataBase в файл index.php.

Давайте вспомним ключевое слово static, которое использовалось в классе DataBase в свойствах и методах данного класса. Это дает нам возможность обращаться к свойствам и методам класса через "::" (два двоеточия). Метод DataBase::Connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE), принимает 4 параметра - созданные функцие define() константы, в которых хранится информация о соединения с базой данных. Если соединение пройдет успешно, метод Connect() вернет нам соединение с базой данных. Далее мы сможем работать и выполнять запросы к базе данных. Функция mysql_query() - выполняет запрос к базе данных. Функция mysql_fetch_assoc() - обрабатывает ряд результата запроса и возвращает ассоциативный массив. Конструкция echo выводит версию сервера MySQL. И в завершение метод DataBase::Close() - закроет соединение с базой данных.

При помощи php...

Создание соединения с БД на PHP разными способами :

1) старый дедовский способ подключения к MySQL:

$conn=mysql_connect($db_hostname, $db_username, $db_password) or die ("Нет подключения к серверу");
mysql_select_db($db_database,$conn) or die ("Нет удалось соединиться с БД");

Пояснения к переменным ниже.

При этом используются функции:

  • mysql_connect() - для подключения к серверу;
  • mysql_select_db() - для подключения к БД;

При этом постоянно проверяем на наличие ошибки таким способом: or die ("Ошибка такая то"); - переводится как или умри с такой-то ошибкой - чтобы сразу найти где ошибка.

config.php

// переменные для соединения с БД
$host = "localhost"; / хост
$username = "root"; // пароль для подключения к БД
$password = ""; // пароль для подлючения к базе данных - на локальном компьютере он может иметь пустое значение.
$database_name = "my-dolgi"; // имя БД

// старый способ соедения с БД
mysql_connect($host, $username, $password) or die("Не могу соединиться создать соединение");

// выбрать БД. Если ошибка - вывести
mysql_select_db($database_name) or die(mysql_error());

index.php

require_once "config.php";


$result = mysql_query("SELECT Name, Money FROM Dolg ORDER BY Money DESC LIMIT 5") or die(mysql_error());



";


while ($row = mysql_fetch_assoc($result)) {
";
}


mysql_free_result($result);

// Закрываем соединение
mysql_close();

2) Более прогрессивный процедурный стиль - соединение с БД при помощи mysqli:

Данный способ:

  1. удобнее;
  2. быстрее до 40 раз;
  3. повышена безопасность;
  4. есть новые возможности и функции;

Пример соединения с БД на php с выборкой из таблицы

config.php

// соедения с БД
$link = mysqli_connect("localhost", "username", "password", "name-database"); // тут вводим прям данные ваши: имя юзера, пароль и имя БД, первое поле обычно localhost

// вывод ошибки соединения
if (!$link) {
echo "Ошибка подключения к БД. Код ошибки: " . mysqli_connect_error();
exit;
}

Обратите внимание - везде используется mysqli , а не mysql !!!

index.php

require_once "config.php";

// Выполнить запрос. Если ошибка - выводим
if ($result = mysqli_query ($link, "SELECT Name, Money FROM Dolg ORDER BY Money DESC LIMIT 5")) {

Echo "Кому я должен по убыванию:

";

// Выборка результатов запроса
while ($row = mysqli_fetch_assoc ($result)) {
echo $row["Name"] . " с долгом " . $row["Money"] . " рублей.
";
}

// освобождение используемой памяти
mysqli_free_result ($result);

// Закрываем соединение
mysqli_close ($link );
}

Как видим, некоторые моменты поменялись (выделены курсивом).

3) Объектно-ориентированный метод подключения к бд MySQL - с помощью методов и классов:

Минусы: сложнее и менее восприимчив к ошибкам.

Плюсы: краткость и удобство для программистов с опытом.

$conn = new mysqli($db_hostname, $db_username, $db_password, $db_database);
if($conn->connect_errno){
die($conn->connect_error);
} else {echo "Соединение с БД успешно установлено";}

тут в принципе все интуитивно понятно:

  • $db_hostname - это хост (в основном localhost),
  • $db_database - имя БД ;
  • $db_username и $db_password - имя пользователя и пароль соответственно!

Пример соединения с БД на php стиль ООП с выборкой из таблицы

config.php

// соедения с БД
$mysqli = new mysqli ("localhost", "username", "password", "name-database"); // тут вводим прям данные ваши: имя юзера, пароль и имя БД, первое поле обычно localhost

// вывод ошибки соединения
if ($mysqli->connect_error) {
die ("Ошибка подключения к БД: (" . $mysqli->connect_errno . ") " . mysqli_connect_error) ;
}

Обратите внимание - везде используется mysqli , а не mysql !!! и в отличие от предыдущего метода появляются стрелочки "->", которые показывают, что это стиль ООП.

index.php

require_once "config.php";

// Выполнить запрос. Если ошибка - выводим
if ($result = $mysqli->query ("SELECT Name, Money FROM Dolg ORDER BY Money DESC LIMIT 5")) {

Echo "Кому я должен по убыванию:

";

// Выборка результатов запроса
while ($row = $result->fetch_assoc ()) {
echo $row["Name"] . " с долгом " . $row["Money"] . " рублей.
";
}

// освобождение используемой памяти
$result->close() ;

// Закрываем соединение
$mysqli->close ();
}

Задание вам такое - найти отличия.

4) Связь с БД при помощи PDO:

При соединении с базой данных MySQL используются подготовленные выражения(методом prepare) и в результате большая безопасность и сильно увеличивает быстродействие.

config файл от предыдущего метода! - такой же

index.php

// PDO стиль для связи с MySQL
if ($stmt = $mysqli->prepare("SELECT Name, Voney FROM Dolg ORDER BY Money < ? LIMIT 5")) {

$stmt->bind_param("i", $summa);
$summa = 100000;

//запускаем выполнение
$stmt->execute();

// Объявление переменных для заготовленных значений
$stmt->bind_result($col1, $col2);

Echo "Кому я должен по убыванию:

";

// Выборка результатов запроса
while ($stmt->fetch()) {
echo $col1 . " с долгом " . $col2 . " рублей.
";
}

// освобождение используемой памяти
$stmt->close();

// Закрываем соединение
$mysqli->close();

Как видим, тут намного сложнее и надо изучать PDO - это отдельная тема.

3 метода подключения к MySQL с PHP с примерами кода


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

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

Для всех приведенных ниже примеров мы будем подключаться к уже существующей базе данных MySQL. Примечание: все, что объясняется здесь, также будет работать с MariaDB, так же как и с MySQL.

1. Подключение к PHP с помощью расширения mysqli
*mysqli означает MySQL Improved

Создайте следующий файл mysqli.php

connect_error) { die("Ошибка: невозможно подключиться: " . $conn->connect_error); } echo "Подключились к базе.
"; $result = $conn->query("SELECT id FROM goroda"); echo "Количество строк: $result->num_rows"; $result->close(); $conn->close(); ?> В приведенном выше коде:

  • mysqli - эта функция инициирует новое соединение с использованием расширения mysqli. Функция принимает четыре аргумента:
    1. localhost имя хоста, на котором запущена база данных MySQL
    2. name - имя пользователя MySQL для подключения
    3. pass - пароль для пользователя mysql
    4. db - база данных MySQL для подключения.
  • qvery - функция запроса MySQL. В этом примере мы выбираем столбец id из базы данных городов.
  • Наконец, мы показываем количество строк, выбранных с использованием переменной num_rows в результате. Мы также закрываем как результат, так и переменную соединения, как показано выше.
Когда вы вызываете вышеуказанный mysqli.php из своего браузера, вы увидите следующий вывод, который указывает, что PHP смог подключиться к базе данных MySQL и получить данные.

Подключились к базе. Количество строк: 6 2. Подключение из PHP MySQL PDO Extension
*PDO означает объекты данных PHP

Драйвер PDO_MYSQL реализует интерфейс PDO, предоставляемый PHP, для подключения из вашего PHP-скрипта к базе данных MySQL.

Создайте следующий файл mysql-pdo.php:

setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "Подключились к базе.
"; $sql = "SELECT id FROM goroda"; print "Список id:
"; foreach ($conn->query($sql) as $row) { print $row["id"] . "
"; } $conn = null; } catch(PDOException $err) { echo "Ошибка: невозможно подключиться: " . $err->getMessage(); } ?> В приведенном выше:

  • new PDO - создаст новый объект PDO, который примет следующие три аргумента:
    1. mysql connect string: он будет в формате «mysql:host=localhost;dbname=db». В приведенном выше примере db работает на localhost, и мы подключаемся к базе данных db.
    2. Имя пользователя MySQL для подключения
    3. Пароль для пользователя mysql
  • переменная $sql - создать запрос sql, который вы хотите выполнить. В этом примере мы выбираем столбец id из таблицы городов.
  • query ($sql). Здесь мы выполняем запрос sql, который мы только что создали.
  • foreach. Здесь мы перебираем результат из указанной выше команды запроса и сохраняем ее в переменной $row, а затем выводим ее с помощью echo.
  • В MySQL PDO, чтобы закрыть соединение, просто установите переменную $conn в значение null.
Когда вы вызываете вышеуказанный скрипт mysqli.php из своего браузера, вы увидите следующие строки; они означают, что PHP смог подключиться к базе данных MySQL и получить информацию:

Подключились к базе. Список id: 1 2 3 4 5 6 3. Подключение из PHP c использование устаревших функций mysql

Используйте этот метод, только если вы используете более старую версию PHP и по какой-то причине не можете обновить ее до новой версии. Рекомендуется использовать метод №2 и метод №3, показанные выше, вместо этого метода. Я включил этот метод только для справки, а не как рекомендацию для использования.

Это конкретное расширение было устарело от версии PHP 5.5. Но, начиная с версии PHP 7.0, это даже не будет работать, поскольку оно было удалено. Начиная с версии PHP 5.5, когда вы используете эти функции, она будет генерировать ошибку E_DEPRECATED.

Создайте файл mysql.php:

"; $result = mysql_query("SELECT id FROM goroda"); $row = mysql_fetch_row($result); echo "id 1: ", $row, "
\n"; mysql_close($conn); ?> В приведенном выше:

  • Функция mysql_connect принимает три аргумента:
    1. имя хоста, в котором запущена база данных MySQL;
    2. имя пользователя MySQL для подключения;
    3. пароль для пользователя mysql. Здесь он подключается к базе данных MySQL, которая выполняется на локальном сервере с использованием имени пользователя и его пароля.
  • Функция mysql_select_db. Как следует из названия, она выбирает базу данных, к которой вы хотите подключиться. Эквивалентно команде «use». В этом примере мы подключаемся к базе данных db.
  • Функция mysql_query - используется для указания вашего запроса MySQL. В этом примере мы выбираем столбец id из базы данных городов.
  • mysql_fetch_row. Используйте эту функцию для извлечения строк из SQL-запроса, который мы только что создали.
  • Наконец, закройте соединение, используя команду mysql_close, как показано выше.
Когда вы вызываете вышеуказанный mysql-legacy.php из своего браузера, вы увидите следующий вывод, который указывает, что PHP смог подключиться к базе данных MySQL и получить информацию:

Подключились к базе. id 1: 1 Вот таким образом можно подключаться к MySQL. Повторюсь, лучше использовать два первых способа; о