Найти в Дзене
WebTechnology

Отправка запросов к базе данных в PHP

В этой статье мы научимся отправлять запросы к базе данных через PHP. Данная статья очень важная, и её необходимо Вам обязательно понять. Однако, успокою Вас - материал очень простой, поэтому затруднений быть не должно. Прежде, чем перейти к теме статьи, я заранее предупреждаю, что не буду подробно разбирать язык SQL. Вся необходимая информация разбирается в категории, посвящённой языку SQL, а здесь мы только работаем с MySQL через PHP. Теперь переходим к отправке запросов к базе данных в PHP: <?php
  $mysqli = @new mysqli('localhost', 'Admin', 'pass', 'mybase');
if (mysqli_connect_errno()) {
    echo "Подключение невозможно: ".mysqli_connect_error();
}
  $mysqli->query('INSERT INTO mytable (name, email) VALUES ("MyName", "myname@mail.ru")');
  $mysqli->close();
?> В данном примере мы подключились к базе данных, проверили успешность подключения, отправили запрос с помощью метода query(), а затем закрыли подключение. Как видите, всё очень просто. Для отправки любых SQL-запросов дос

В этой статье мы научимся отправлять запросы к базе данных через PHP. Данная статья очень важная, и её необходимо Вам обязательно понять. Однако, успокою Вас - материал очень простой, поэтому затруднений быть не должно.

Прежде, чем перейти к теме статьи, я заранее предупреждаю, что не буду подробно разбирать язык SQL. Вся необходимая информация разбирается в категории, посвящённой языку SQL, а здесь мы только работаем с MySQL через PHP.

Теперь переходим к отправке запросов к базе данных в PHP:

<?php
  $mysqli = @new mysqli('localhost', 'Admin', 'pass', 'mybase');
if (mysqli_connect_errno()) {
    echo "Подключение невозможно: ".mysqli_connect_error();
}
  $mysqli->query('INSERT INTO mytable (name, email) VALUES ("MyName", "myname@mail.ru")');
  $mysqli->close();
?>

В данном примере мы подключились к базе данных, проверили успешность подключения, отправили запрос с помощью метода query(), а затем закрыли подключение. Как видите, всё очень просто. Для отправки любых SQL-запросов достаточно всего одного метода - query(), поэтому в данном случае всё безумно просто.

Теперь чуть-чуть усложним задачу. Давайте с Вами разберём запросы, которые возвращают result_set - результат. Самый популярный запрос, возврающающий result_set - это выборка данных из таблицы. В следующем примере мы с Вами сделаем выборку данных, а затем выведем результат:

<?php
  $mysqli = @new mysqli('localhost', 'Admin', 'pass', 'mybase');
if (mysqli_connect_errno()) {
    echo "Подключение невозможно: ".mysqli_connect_error();
}
  $result_set = $mysqli->query('SELECT * FROM mytable');
while ($row = $result_set->fetch_assoc()) {
    print_r($row);
    echo "<br />";
}
  $result_set->close();
  $mysqli->close();
?>

Для начала немного поясню, что из себя представляет result_set. Result_set - это таблица с результатом. У этой таблицы есть набор записей (строки таблицы). И для вывода всех записей надо перебрать каждую строку таблицы и вывести её. А теперь поясняю пример: после отправки запроса у нас формируется result_set. Затем мы в цикле присваиваем переменной row значение очередной строки, то есть одномерный массив, который возвращает метод fetch_assoc(). Когда все строки закончатся, метод fetch_assoc() вернёт false, и будет произведён выход из цикла. Внутри цикла while мы просто выводим массив с использованием отладочной функции print_r(), хотя, безусловно, можно было бы вывести с использованием foreach, но сейчас это не нужно.

Давайте кратко подведём итог, как нужно работать с result_set:

  • Получить result_set, отправив соответствующий запрос к базе данных.
  • В цикле на каждой итерации присваивать следующую строку (запись) из result_set с использованием метода fetch_assoc() некоторой переменной row. Дальше Вы можете работать с этой переменной как с одномерным ассоциативным массивом, у которого ключи - это названия полей таблицы, а значения соответствуют текущей записи.
  • Обязательно закройте result_set методом close(), чтобы осводить ресурсы.

Как Вы заметили, метод fetch_assoc() возвращает всегда следующую запись. То есть сначала 1-ю, потом 2-ю, потом 3-ю и так далее. Если у Вас есть неплохой опыт программирования, то Вы сразу догадаетесь, что это происходит благодаря внутреннему указателю, который Вы, разумеется, можете двигать. Где это используется? Например, это может использоваться, когда Вам необходимо поработать с result_set не 1, а 2 и более раз. Чтобы заново не формировать тот же запрос, можно просто передвинуть указатель в начало. И тогда можно снова заниматься перебором result_set с помощью метода fetch_assoc().

Для изменения положения указателя существует метод data_seek(), который принимает целое число от 0 до "количества записей - 1", соответственно указатель встаёт на соответствующую параметру запись:

<?php
  $mysqli = @new mysqli('localhost', 'Admin', 'pass', 'mybase');
if (mysqli_connect_errno()) {
    echo "Подключение невозможно: ".mysqli_connect_error();
}
  $result_set = $mysqli->query('SELECT * FROM mytable');
  $result_set->num_rows;
while ($row = $result_set->fetch_assoc()) {
    print_r($row);
    echo "<br />";
}
  $result_set->data_seek(0);
while ($row = $result_set->fetch_assoc()) {
    print_r($row);
    echo "<br />";
}
  $result_set->close();
  $mysqli->close();
?>

В этом примере мы вывели количество записей в result_set с помощью свойства num_rows. А также познакомились с методом data_seek(). То есть мы перебрали весь результат, затем вернули указатель на 0-ю запись и вновь перебрали результат.

В этой статье мы с Вами повторили подключение к базе данных и закрытие подключения. А также узнали, как отправлять запросы к базе данных через PHP. Узнали, как получать result_set и как работать с ним. Это всё, что Вам необходимо знать для успешной работы с MySQL в PHP.