Создание соединения с БД MySQL разными способами
- Подробности
- Категория: PHP
- Просмотров: 14931
Без соединения с базой данных (БД) сегодня не работает практически ни один сайт...поэтому и мы рассмотрим как соединяться с MySQL при помощи 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 ("Ошибка такая то"); - переводится как или умри с такой-то ошибкой - чтобы сразу найти где ошибка.
Пример соединения с БД на php с выборкой из таблицы
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());
Обратите внимание: в php8 будет ошибка Uncaught Error: Call to undefined function mysql_connect() - так как уже такой функции нет и надо применять mysqli_connect()
index.php
require_once 'config.php';
// Выполнить запрос. Если ошибка - выводим
$result = mysql_query('SELECT Name, Money FROM Dolg ORDER BY Money DESC LIMIT 5') or die(mysql_error());
echo "Кому я должен по убыванию: <br><br>";
// Выборка результатов запроса
while ( $row = mysql_fetch_assoc($result) ) {
echo $row['Name'] . " с долгом " . $row['Money'] . " рублей.<br>";
}
// освобождение используемой памяти
mysql_free_result($result);
// Закрываем соединение
mysql_close();
2) Более прогрессивный процедурный стиль - соединение с БД при помощи mysqli:
Данный способ:
- удобнее;
- быстрее до 40 раз;
- повышена безопасность;
- есть новые возможности и функции;
Пример соединения с БД на 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 "Кому я должен по убыванию: <br><br>";
// Выборка результатов запроса
while ( $row = mysqli_fetch_assoc($result) ) {
echo $row['Name'] . " с долгом " . $row['Money'] . " рублей.<br>";
}
// освобождение используемой памяти
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 "Кому я должен по убыванию: <br><br>";
// Выборка результатов запроса
while ( $row = $result->fetch_assoc() ) {
echo $row['Name'] . " с долгом " . $row['Money'] . " рублей.<br>";
}
// освобождение используемой памяти
$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 "Кому я должен по убыванию: <br><br>";
// Выборка результатов запроса
while ( $stmt->fetch() ) {
echo $col1 . " с долгом " . $col2 . " рублей.<br>";
}
// освобождение используемой памяти
$stmt->close();
// Закрываем соединение
$mysqli->close();
}
Как видим, тут намного сложнее и надо изучать PDO - это отдельная тема.
---
Реальный пример работы с Mysql с помощью PHP подробно с выборкой и тд
1. Подключение к базе данных
Для подключения к базе данных MySQL в PHP используется функция mysqli_connect(). Она принимает четыре параметра: имя хоста, имя пользователя, пароль и имя базы данных.
Пример:
$host = "localhost";
$username = "user";
$password = "password";
$dbname = "database";
$conn = mysqli_connect($host, $username, $password, $dbname);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
2. Выполнение запросов
Для выполнения запросов к базе данных MySQL в PHP используется функция mysqli_query(). Она принимает два параметра: объект соединения и SQL-запрос.
Пример:
$sql = "SELECT * FROM users";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
while ($row = mysqli_fetch_assoc($result)) {
echo "Name: " . $row["name"] . " Email: " . $row["email"];
}
} else {
echo "0 results";
}
Кстати, перебрать ассоциативный массив, пришедший из БД можно еще так:
if (mysqli_num_rows($categories) > 0) {
echo '<ul>';
foreach ($categories as $category) {
echo '<li>' . $category['name'] . '</li>';
}
echo '</ul>';
}
будет тоже самое!
В данном примере мы выполняем запрос на выборку всех пользователей из таблицы users и выводим их имена и электронные адреса.
3. Использование параметров
Для безопасного выполнения запросов к базе данных MySQL в PHP рекомендуется использовать параметры. Для этого используется функция mysqli_prepare(), которая принимает объект соединения и SQL-запрос с заполнителями вместо значений.
Пример:
$name = "John";
$email = "Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.";
$stmt = mysqli_prepare($conn, "INSERT INTO users (name, email) VALUES (?, ?)");
mysqli_stmt_bind_param($stmt, "ss", $name, $email);
mysqli_stmt_execute($stmt);
В данном примере мы добавляем нового пользователя в таблицу users с помощью подготовленного запроса. Вместо значений мы используем заполнители в виде вопросительных знаков, а затем связываем их с переменными с помощью функции mysqli_stmt_bind_param().
4. Использование транзакций
Для выполнения нескольких запросов к базе данных MySQL в рамках одной транзакции в PHP используется функция mysqli_begin_transaction(). Она принимает объект соединения и начинает новую транзакцию.
Пример:
mysqli_begin_transaction($conn);
mysqli_query($conn, "UPDATE users SET name='John' WHERE id=1");
mysqli_query($conn, "UPDATE orders SET status='paid' WHERE user_id=1");
if (mysqli_commit($conn)) {
echo "Transaction committed";
} else {
echo "Transaction rolled back";
}
В данном примере мы обновляем имя пользователя и статус заказов в рамках одной транзакции. После выполнения всех запросов мы коммитим транзакцию с помощью функции mysqli_commit(). Если при выполнении запросов произошла ошибка, мы откатываем транзакцию с помощью функции mysqli_rollback().