Активный
- Тема Автор
- #1
Работа с базами данных - основа веб-приложений. Разберем подключение и использование MySQL.
Подключение через MySQLi (объектно-ориентированный стиль)
Подключение через MySQLi (процедурный стиль)
Подключение через PDO
Выполнение SELECT запросов
Вставка данных (INSERT)
Обновление данных (UPDATE)
Удаление данных (DELETE)
Класс для работы с базой данных
Работа с транзакциями
Обработка ошибок
Безопасность: защита от SQL инъекций
Важные моменты:
- Всегда используйте prepared statements
- Проверяйте подключение перед запросами
- Обрабатывайте ошибки правильно
- Закрывайте соединения после использования
- Используйте транзакции для сложных операций
Правильная работа с БД - основа безопасного приложения!
Подключение через 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
- Проверяйте подключение перед запросами
- Обрабатывайте ошибки правильно
- Закрывайте соединения после использования
- Используйте транзакции для сложных операций
Правильная работа с БД - основа безопасного приложения!