Базовые примеры расширения MySQLi
Этот пример показывает как соединяться, выполнять запрос, использовать базовую обработку ошибок, распечатывать результирующую выборку и отключаться от базы данных MySQL.
В этом примере используется свободно доступная база данных Sakila которая может быть загружена с » dev.mysql.com, как описано здесь. Для того, чтобы этот пример работал (a) установите sakila и (b) измените переменные для соединения с БД (host, your_user, your_pass).
Пример #1 Обзорный пример работы с расширением MySQLi
<?php
// Давайте начнем с переменной $_GET в нашем примере.
// Она содержит идентификатор aid для поля actor_id в БД Sakila.
// Пусть ее значение по умолчанию будет 1
// и тип этой переменной будет строго целочисленным во избежание SQL-инъекции
// и/или связанных с этим проблем безопасности. Контроль всего перечисленного выше
// лежит за пределами этого простого примера.
// Пример:
// http://example.org/script.php?aid=42
if (isset($_GET['aid']) && is_numeric($_GET['aid'])) {
$aid = (int) $_GET['aid'];
} else {
$aid = 1;
}
// Подключаемся к базе MySQL и выбираем базу под названием sakila
// Хост: 127.0.0.1, имя пользователя: your_user, пароль: your_pass, база: sakila
$mysqli = new mysqli('127.0.0.1', 'your_user', 'your_pass', 'sakila');
// О нет!! переменная connect_errno существует, а это значит, что соединение не было успешным!
if ($mysqli->connect_errno) {
// Соединение не удалось. Что нужно делать в этом случае?
// Можно отправить письмо администратору, отразить ошибку в журнале,
// информировать пользователя об ошибке на экране и т.п.
// Вам не нужно при этом раскрывать конфиденциальную информацию, поэтому
// просто попробуем так:
echo "Извините, возникла проблема на сайте";
// На реальном сайте этого делать не следует, но в качестве примера мы покажем
// как распечатывать информацию о подробностях возникшей ошибки MySQL
echo "Ошибка: Не удалась создать соединение с базой MySQL и вот почему: \n";
echo "Номер ошибки: " . $mysqli->connect_errno . "\n";
echo "Ошибка: " . $mysqli->connect_error . "\n";
// Вы можете захотеть показать что-то еще, но мы просто выйдем
exit;
}
// Выполняем запрос SQL
$sql = "SELECT actor_id, first_name, last_name FROM actor WHERE actor_id = $aid";
if (!$result = $mysqli->query($sql)) {
// О нет! запрос не удался.
echo "Извините, возникла проблема в работе сайта.";
// И снова: не делайте этого на реальном сайте, но в этом примере мы покажем,
// как получить информацию об ошибке:
echo "Ошибка: Наш запрос не удался и вот почему: \n";
echo "Запрос: " . $sql . "\n";
echo "Номер ошибки: " . $mysqli->errno . "\n";
echo "Ошибка: " . $mysqli->error . "\n";
exit;
}
// Уфф, мы это сделали. У нас есть соединение с базой данных и успешный запрос.
// Но где же его результат?
if ($result->num_rows === 0) {
// Упс! в запросе нет ни одной строки! Иногда это ожидаемо и нормально, иногда нет.
// Решать вам. В данном случае, может быть actor_id был слишком большим?
echo "Мы не смогли найти совпадение для $aid, простите. Пожалуйста, попробуйте еще раз.";
exit;
}
// Теперь мы знаем только, что результат выполнения запроса существует, поэтому давайте
// перенесем его в ассоциативный массив, в котором ключами массива будут названия
// столбцов.
$actor = $result->fetch_assoc();
echo "Иногда я вижу " . $actor['first_name'] . " " . $actor['last_name'] . " по телевизору.";
// Теперь давайте выгрузим пять случайных актеров и выведем их имена в список.
// Здесь мы добавим меньше степеней обработки ошибок, чтобы вы сделали это самостоятельно
$sql = "SELECT actor_id, first_name, last_name FROM actor ORDER BY rand() LIMIT 5";
if (!$result = $mysqli->query($sql)) {
echo "Извините, возникла проблема в работе сайта.";
exit;
}
// Распечатываем список из пяти случайно выбранных актеров и создаем ссылку на id
// каждого из них
echo "<ul>\n";
while ($actor = $result->fetch_assoc()) {
echo "<li><a href='" . $_SERVER['SCRIPT_FILENAME'] . "?aid=" . $actor['actor_id'] . "'>\n";
echo $actor['first_name'] . ' ' . $actor['last_name'];
echo "</a></li>\n";
}
echo "</ul>\n";
// Скрипт автоматически закрывает соединение MySQL и освобождает память, тем не
// менее давайте сделаем это вручную
$result->free();
$mysqli->close();
?>