Подключение к MySQL в PHP: полное руководство

Активный
Статус
Сообщения
516
Лайки
32

8

месяц на сайте

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

Подключение через MySQLi (объектно-ориентированный стиль)
Код:
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mydatabase";

// Создание подключения
$conn = new mysqli($servername, $username, $password, $dbname);

// Проверка подключения
if($conn->connect_error) {
    die("Ошибка подключения: " . $conn->connect_error);
}

echo "Подключение успешно";
$conn->close();
?>

Подключение через MySQLi (процедурный стиль)
Код:
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mydatabase";

// Создание подключения
$conn = mysqli_connect($servername, $username, $password, $dbname);

// Проверка подключения
if(!$conn) {
    die("Ошибка подключения: " . mysqli_connect_error());
}

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

Подключение через PDO
Код:
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mydatabase";

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Подключение успешно";
} catch(PDOException $e) {
    echo "Ошибка подключения: " . $e->getMessage();
}
?>

Выполнение SELECT запросов
Код:
<?php
$conn = new mysqli("localhost", "root", "", "mydatabase");

$sql = "SELECT id, name, email FROM users";
$result = $conn->query($sql);

if($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "ID: " . $row["id"] . " Name: " . $row["name"] . " Email: " . $row["email"] . "<br>";
    }
} else {
    echo "Результатов не найдено";
}

$conn->close();
?>

Вставка данных (INSERT)
Код:
<?php
$conn = new mysqli("localhost", "root", "", "mydatabase");

// Использование prepared statements
$stmt = $conn->prepare("INSERT INTO users (name, email, age) VALUES (?, ?, ?)");
$stmt->bind_param("ssi", $name, $email, $age);

$name = "John";
$email = "john@example.com";
$age = 25;
$stmt->execute();

echo "Запись добавлена";
$stmt->close();
$conn->close();
?>

Обновление данных (UPDATE)
Код:
<?php
$conn = new mysqli("localhost", "root", "", "mydatabase");

$stmt = $conn->prepare("UPDATE users SET name = ?, email = ? WHERE id = ?");
$stmt->bind_param("ssi", $name, $email, $id);

$name = "John Updated";
$email = "johnupdated@example.com";
$id = 1;
$stmt->execute();

echo "Запись обновлена";
$stmt->close();
$conn->close();
?>

Удаление данных (DELETE)
Код:
<?php
$conn = new mysqli("localhost", "root", "", "mydatabase");

$stmt = $conn->prepare("DELETE FROM users WHERE id = ?");
$stmt->bind_param("i", $id);

$id = 1;
$stmt->execute();

echo "Запись удалена";
$stmt->close();
$conn->close();
?>

Класс для работы с базой данных
Код:
<?php
class Database {
    private $host = "localhost";
    private $username = "root";
    private $password = "";
    private $database = "mydatabase";
    private $conn;
    
    public function __construct() {
        $this->conn = new mysqli($this->host, $this->username, $this->password, $this->database);
        
        if($this->conn->connect_error) {
            die("Ошибка подключения: " . $this->conn->connect_error);
        }
    }
    
    public function query($sql) {
        return $this->conn->query($sql);
    }
    
    public function prepare($sql) {
        return $this->conn->prepare($sql);
    }
    
    public function getConnection() {
        return $this->conn;
    }
    
    public function close() {
        $this->conn->close();
    }
}

// Использование
$db = new Database();
$result = $db->query("SELECT * FROM users");
$db->close();
?>

Работа с транзакциями
Код:
<?php
$conn = new mysqli("localhost", "root", "", "mydatabase");

// Отключение автокоммита
$conn->autocommit(FALSE);

try {
    // Первая операция
    $conn->query("INSERT INTO users (name, email) VALUES ('John', 'john@example.com')");
    
    // Вторая операция
    $conn->query("INSERT INTO orders (user_id, total) VALUES (LAST_INSERT_ID(), 100)");
    
    // Коммит транзакции
    $conn->commit();
    echo "Транзакция выполнена успешно";
} catch(Exception $e) {
    // Откат транзакции
    $conn->rollback();
    echo "Ошибка: " . $e->getMessage();
}

$conn->autocommit(TRUE);
$conn->close();
?>

Обработка ошибок
Код:
<?php
$conn = new mysqli("localhost", "root", "", "mydatabase");

if($conn->connect_error) {
    error_log("Ошибка подключения к БД: " . $conn->connect_error);
    die("Ошибка подключения к базе данных");
}

$sql = "SELECT * FROM users";
$result = $conn->query($sql);

if(!$result) {
    error_log("Ошибка запроса: " . $conn->error);
    die("Ошибка выполнения запроса");
}

// Обработка результата
while($row = $result->fetch_assoc()) {
    // обработка данных
}

$conn->close();
?>

Безопасность: защита от SQL инъекций
Код:
<?php
// НЕПРАВИЛЬНО - уязвимо для SQL инъекций
$name = $_POST["name"];
$sql = "SELECT * FROM users WHERE name = '$name'";
$result = $conn->query($sql);

// ПРАВИЛЬНО - использование prepared statements
$stmt = $conn->prepare("SELECT * FROM users WHERE name = ?");
$stmt->bind_param("s", $name);
$name = $_POST["name"];
$stmt->execute();
$result = $stmt->get_result();
?>

Важные моменты:
- Всегда используйте prepared statements
- Проверяйте подключение перед запросами
- Обрабатывайте ошибки правильно
- Закрывайте соединения после использования
- Используйте транзакции для сложных операций

Правильная работа с БД - основа безопасного приложения!
 

1 человек читают эту тему (Всего: 1, Пользователей: 0, Гостей: 1)

Сверху