Подключение к базе данных в PHP
![Подключение к базе данных в PHP](/images/articles/mysql-connect.jpg)
Прежде чем перейти к статье, хочу извиниться за задержки в их написании. Сейчас идёт экзаменационная сессия, поэтому далеко не каждый день получается что-нибудь написать, но впредь обязательно наверстаю. В этой статье мы переходим к общению с базами данных через PHP. PHP содержит все возможности для работы с базами с использованием ПО MySQL, и в этой статье мы научимся подключаться к базе данных через PHP.
Есть несколько способов работы с MySQL в PHP. Все эти способы появлялись, затем устаревали, заменяясь новыми. И на данный момент самый последний способ - это объекто-ориентированная модель общения с MySQL. Именно с использованием этого самого современного способа мы и будем работать с базами данных.
Прежде, чем перейти к подключение к базе данных в PHP, давайте разберём алгоритм работы с ними:
- Подключение.
- Отправка запросов и получение результата.
- Закрытие подключения.
Подключиться к базе данных через PHP можно следующим образом:
<?php
$mysqli = new mysqli('localhost', 'Admin', 'pass', 'mybase');
?>
Тут всё интуитивно понятно, однако, сделаю пояснения: мы создаём экземпляр объекта MySQLI, передавая конструктору следующие параметры:
- Имя хоста, на котором работает MySQL.
- Имя пользователя.
- Пароль.
- Имя базы данных, с которой мы хотим работать.
Если какие-нибудь данные будут неверные, то, соответственно, конструктор вернёт ошибку, и подключения не будет.
Однако, тут есть один хитрый момент. Дело в том, что если будет ошибка подключения, то выполнение скрипта не будет остановлено. В результате, он начнёт дальше выполнять наш код. В большинстве случаев, при ошибке подключения требуется прекратить выполнение скрипта, поэтому пишут так:
<?php
$mysqli = @new mysqli('localhost', 'Admin', 'pass', 'mybase');
if (mysqli_connect_errno()) {
echo "Подключение невозможно: ".mysqli_connect_error();
}
?>
В данном примере мы проверяем: если были какие-либо ошибки при подключении, то выводим их и заканчиваем выполнение скрипта (функция exit()). Также обратите внимание на оператор подавления ошибок "@", который мы вставляем для того, чтобы убрать сообщение PHP о невозможности подключения, ведь мы это потом сами проверяем и выводим уведомление.
Давайте выполним третью и последнюю часть алгоритма работы с базами данных - закрытие подключения. В примере ниже мы подключаемся к базе данных, а после проверки на успешность подключения, закрываем это соединение:
<?php
$mysqli = @new mysqli('localhost', 'Admin', 'pass', 'mybase');
if (mysqli_connect_errno()) {
echo "Подключение невозможно: ".mysqli_connect_error();
}
$mysqli->close();
?>
Как Вы догадались, закрывает подключение метод close().
Подвожу небольшой итог: мы с Вами научились открывать и закрывать подключения к базе данных в PHP, а уже в следующей статье мы с Вами научимся отправлять запросы и получать ответы.
-
-
Михаил Русаков
Комментарии (32):
Процедурный стиль <?php $link = @mysqli_connect('localhost', 'fake_user', 'my_password', 'my_db'); if (!$link) { die('Ошибка соединения: ' . mysqli_connect_errno()); } ?>
Ответить
Что лучше? Объектно-ориентированный стиль или Процедурный стиль? Прикоментуй что где использовать.
Ответить
ООП лучше, так как является более современным и более удобным (чтобы это понять, нужно изучать ООП).
Ответить
Объектно-ориентированный стиль <?php $mysqli = @new mysqli('localhost', 'fake_user', 'my_password', 'my_db'); if ($mysqli->connect_errno) { die('Ошибка соединения: ' . $mysqli->connect_errno); } ?>
Ответить
Не работает. не соединяет. А "процедурный стиль" работает. в чём подвох??
Ответить
Разве что у Вас очень старая версия php, в которой это не поддерживается.
Ответить
"Денвер" этим летом скачивала. месяц тому. Естественно, последнюю версию. Может, с настройками что не так? Что есть старая версия php?
Ответить
Значит проблема может быть только в том, что Вы где-то допускаете ошибку. Если Вы недавно установили Денвер, то у Вас точно всё должно поддерживаться и никаких настроек дополнительных не надо.
Ответить
Точно по уроку делала. перепроверила код раз 20. База данных пуста. может не в подключении дело. но через"mysqli_connect" получается. вот
Ответить
Михаил, такая проблема: Я пытаюсь создать класс для удобной работы с запросами MySQLi. Вот код: <?php class mysqli_class { private $host; private $database; private $name; private $pass; private $link; public $query; public function __construct ($host, $name, $password, $base) { $this -> host = $host; $this -> name = $name; $this -> pass = $password; $this -> database = $base; } public function connect() { if (!($this -> link = new mysqli($this -> host, $this -> name, $this -> pass))) { $this -> error('Не могу подключиться к '.$this -> host); return false; } if (!mysqli_select_db($this -> link, $this -> database)) { $this -> error('Не могу войти в базу '.$this -> database); return false; } } public function query($query) { $this -> connect(); $this -> result = mysqli_query($this -> link, $query) or $this -> error('Не могу выполнить запрос'); return $this -> result; } } ?> А вот само обращение: <?php require('classes\mysqli_class.php'); $mysqli = new mysqli_class('localhost', 'root', 'pass', 'agrobuy'); $mysqli -> query('SELECT * FROM ads ORDER BY ad_id DESC LIMIT 3'); while ($row = mysqli_fetch_array($mysqli -> result)) { } ?> Все ли здесь правильно? У меня сомнения..будто что-то лишнее..хотя вроде работает..
Ответить
Раз работает, то пойдёт для начала. Хотя нюансов здесь много. Я через пару недель напишу свой класс и выложу здесь на сайте.
Ответить
Делал на локальном сервере соединение с базой данных - вот всё отлично работало,а на реальном сервере зарегился, и теперь выдаёт такую ошибку:"Warning: mysqli::mysqli(): (HY000/1130): Host '***' is not allowed to connect to this MySQL server in /home/***/public_html/blocks/function.php on line 6 Warning: mysqli::query(): Couldn't fetch mysqli in /home/***/public_html/blocks/function.php on line 7" может Вы взглядом мастера увидите сразу, в чём дело?)
Ответить
С этой ошибкой лучше обратиться в службу поддержки хостинга, так как она говорит, что с данного хоста невозможно подключиться к базе данных.
Ответить
В PHP v.5.1 появился класс PDO (PHP Data Objects). Михаил, если у Вас будет желание и время, напишете статью? Очень хотелось бы увидеть обзор этого класса на человеческом языке ;) Заранее благодарен
Ответить
Помогите пожалуйста! Подключаюсь к базе данных, вот код:<?php $mysqli = @new Mysqli('localhost', 'MyAdmin', '123456', 'mybase'); if(mysqli_connect_errno()) { echo "Подключение к серверу невозможно. Причина : ".mysqli_connect_error(); exit; } $mysqli->close(); ?> Открываю сайт, пишет:Access denied for user 'MyAdmin'@'localhost' (using password: YES). В чём ошибка? Пароль и пользователь введены правильно! В phpMyadmin созданы!
Ответить
Используйте пользователя root и пустой пароль.
Ответить
Но как избавиться от этой проблемы???Или подскажите как создать пользователя через конфиг. файл.
Ответить
http://myrusakov.ru/phpmyadmin-users.html
Ответить
Миша, напиши пожалуйста несколько статей про хранение сессий в базе данных, причём сделай данную статью с готовым классом для работы, в интернете не нашёл ничего кроме теории, напиши про namespace, trait, mvc на ооп(структура распределения классов и сущностей), напиши про MOVE, HMVC, работу с git, причём на статьи по git удели побольше времени, все будут рады что ты пишешь современные и нужные статьи, и ещё что-нибудь про структуирование папок и классов при проектировании сайта, где что должно лежать, и опиши все изветсные архитектуры проектирования. Не напишешь, будешь дураком, сейчас все про это пишут и получают хороший трафик, чем ты хуже?
Ответить
Михаил, Здравствуйте! Помогите пожалуйста, у меня возникла проблема с добавлением записей в таблицу через PHP. Ошибку не выводит, сколько не пересматривал код - вроде все правильно. Суть ошибки в том, что после обновления страницы в БД записей нету. Там пусто. вот код: <?php $mysqli = new mysqli("localhost", "root", "", "mybase"); $mysqli->query("SET NAMES 'utf8'"); $success = $mysqli->query("INSESRT INTO `users` (`login`, `password`) VALUES ('User1', '".md5(123)."')"); echo $success; $mysqli->close(); ?>
Ответить
Александр, проверьте подключение к БД, скорее всего не верно настроенное соединение.
Ответить
А есть ли смысл закрывать соединение с бд? В гуле искал - однозначного ответа ненашел типа "само закроется"
Ответить
Здравствуйте, изучаю курс "Создание и раскрутка сайта от А до Я", пытаюсь подключиться к MySQL, по уроку, но получаю:"Подключение невозможно: Access denied for user 'MyAdmin'@'localhost' (using password: YES) Warning: mysqli::close() [mysqli.close]: Couldn't fetch mysqli in Z:\home\test1.local\www\index.php on line 10" Все делал как в уроке, кроме выбора кодировки, так как все пишу в UTF8, её и поставил и в базе и в коде:"$host="localhost"; $user="MyAdmin"; $password="123456"; $db="mybase"; $mysqli = @new mysqli('localhost', $user, $password, $db); if (mysqli_connect_error()) { echo "Подключение невозможно: ".mysqli_connect_error(); } $mysqli->close();" Подскажите в чем может быть дело, заранее спасибо.
Ответить
всё дело в том, что вы не правильно ввели логин и пароль от базы данных =)
Ответить
Я несколько раз перепроверял, все данные совпадают и логин, и пароль, вот в чём штука... )))
Ответить
значит не совпадают,или не имеют доступа к бд. Попробуйте в логин вставить root, а пароль оставить пустым
Ответить
root, прошёл... Тогда, не понятно, почему не проходит MyAdmin с паролем 123456, как указано в уроке... Как тогда подключать другого пользователя?
Ответить
его создать сначала надо,и дать доступ. на локальном сервере не вижу смысла в другом пользователе, на хостинге же всё делается через панель управления,обычно.
Ответить
Возможно Вы и правы, только не понятно зачем тогда это нужно было включать в урок, если нельзя этим воспользоваться на локальном сервере? И в уроке ведь все работает..
Ответить
я вам ещё раз говорю,значит что-то не верно сделали,или упустили. Всё,естественно,работает. Без разницы,сколько раз вы перепроверяли,проверьте ещё раз. Пересмотрите заново,проверьте права на доступ к базе данных mybase у пользователя MyAdmin. Вероятнее всего их просто нет. Либо,пароль не верен всё-таки. Авторизируйтесь через phpmyadmin c данного аккаунта и посмотрите,какие базы данных там видны и есть ли среди них mybase
Ответить
Привет программистам! У меня такая проблема: В общем я в программировании еще совсем новичок и не знаю как мне создать "базу данных", в каком файле ее подключить и как с ней работать. Кто может - ПОМОГИТЕ. Чтобы не было лишних вопросов - сразу скажу: Denwer у меня есть и на нем я тестирую движек, который собрал (кое как=)), из текстовых редакторов у меня - Notepad++.
Ответить
Hello from 2023 guys, NIS TDK. Aslan was here SIUU
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.