Verification: a143cc29221c9be0

Mysql запись в массив php

Mysql запись в массив php

Как выглядит работа с базой данных

Типичный процесс работы с СУБД в PHP-сценарии состоит из нескольких шагов:

  1. Установить подключение к серверу СУБД, передав необходимые параметры: адрес, логин, пароль.
  2. Убедиться, что подключение прошло успешно: сервер СУБД доступен, логин и пароль верные и так далее.
  3. Сформировать правильный SQL запрос (например, на чтение данных из таблицы).
  4. Убедиться, что запрос был выполнен успешно.
  5. Получить результат от СУБД в виде массива из записей.
  6. Использовать полученные записи в своём сценарии (например, показать их в виде таблицы).

Функция mysqli connect: соединение с MySQL

Перед началом работы с данными внутри MySQL, нужно открыть соединение с сервером СУБД.
В PHP это делается с помощью стандартной функции mysqli_connect(). Функция возвращает результат — ресурс соединения. Данный ресурс используется для всех следующих операций с MySQL.

Но чтобы выполнить соединение с сервером, необходимо знать как минимум три параметра:

  • Адрес сервера СУБД;
  • Логин;
  • Пароль.

Если вы следовали стандартной процедуре установки MySQL или используете OpenServer, то адресом сервера будет localhost, логином — root. При использовании OpenServer пароль для подключения — это пустая строка ‘’, а при самостоятельной установке MySQL пароль вы задавали в одном из шагов мастера установки.

Базовый синтаксис функции mysqli_connect():

mysqli_connect(, , , );

Проверка соединения

Первое, что нужно сделать после соединения с СУБД — это выполнить проверку, что оно было успешным.
Эта проверка нужна, чтобы исключить ошибку при подключении к БД. Неверные параметры подключения, неправильная настройка или высокая нагрузка заставит MySQL отвеграть новые подключения. Все эти ситуации приведут к невозможности соединения, поэтому программист должен проверить успешность подключения к серверу, прежде чем выполнять следующие действия.

Соединение с MySQL устанавливается один раз в сценарии, а затем используется при всех запросах к БД.
Результатом выполнения функции mysqli_connect() будет значение специального типа — ресурс.
Если подключение к MySQL не удалось, то функция mysqli_connect() вместо ресурса вернет логическое значение типа «ложь» — false.
Хорошей практикой будет всегда проверять значение результа выполнения этой функции и сравнивать его с ложью.

Соединение с MySQL и проверка на ошибки:

Функция mysqli_connect_error() просто возвращает текстовое описание последней ошибки MySQL.

Установка кодировки

Первым делом после установки соединения крайне желательно явно задать кодировку, которая будет использоваться при обмене данными с MySQL. Если этого не сделать, то вместо записей со значениями, написанными кириллицей, можно получить последовательность из знаков вопроса: ‘?????????????????’.
Вызови эту функцию сразу после успешной установки соединения: mysqli_set_charset($con, "utf8");

Выполнение запросов

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

Два вида запросов

Следует разделять все SQL-запросы на две группы:

  1. Чтение информации (SELECT).
  2. Модификация (UPDATE, INSERT, DELETE).

При выполнении запросов из среды PHP, запросы из второй группы возвращают только результат их исполнения: успех или ошибку.
Запросы первой группы при успешном выполнении возвращают специальный ресурс результата. Его, в свою очередь, можно преобразовать в ассоциативный массив (если нужна одна запись) или в двумерный массив (если требуется список записей).

Добавление записи

Вернёмся к нашему проекту — дневнику наблюдений за погодой. Начнём практическую работу с заполнения таблиц данными. Для начала добавим хотя бы один город в таблицу cities.

Выражение INSERT INTO используется для добавления новых записей в таблицу базы данных.

Составим корректный SQL-запрос на вставку записи с именем города, а затем выполним его путём передачи этого запроса в функцию mysqli_query(), чтобы добавить новые данные в таблицу.

Обратите внимание, что первым параметром для функциии mysqli_query() передаётся ресурс подключения, полученный от функции mysqli_connect(), вторым параметром следует строка с SQL-запросом.
При запросах на изменение данных (не SELECT) результатом выполнения будет логическое значение — true или false.
false будет означать, что запрос выполнить не удалось. Для получения строки с описанием ошибки существует функция mysqli_error($link).

Функция insert id: как получить идентификатор добавленной записи

Следующим шагом будет добавление погодной записи для нового города.
Погодные записи хранит таблица weather_log, но, чтобы сослаться на город, необходимо знать идентификатор записи из таблицы cities.
Здесь пригодится функция mysqli_insert_id().
Она принимает единственный аргумент — ресурс соединения, а возвращает идентификатор последней добавленной записи.

Теперь у нас есть всё необходимое, чтобы добавить погодную запись.
Вот как будет выглядеть комплексный пример с подключением к MySQL и добавлением двух новых записей:

Как выглядит работа с базой данных

Типичный процесс работы с СУБД в PHP-сценарии состоит из нескольких шагов:

  1. Установить подключение к серверу СУБД, передав необходимые параметры: адрес, логин, пароль.
  2. Убедиться, что подключение прошло успешно: сервер СУБД доступен, логин и пароль верные и так далее.
  3. Сформировать правильный SQL запрос (например, на чтение данных из таблицы).
  4. Убедиться, что запрос был выполнен успешно.
  5. Получить результат от СУБД в виде массива из записей.
  6. Использовать полученные записи в своём сценарии (например, показать их в виде таблицы).

Функция mysqli connect: соединение с MySQL

Перед началом работы с данными внутри MySQL, нужно открыть соединение с сервером СУБД.
В PHP это делается с помощью стандартной функции mysqli_connect(). Функция возвращает результат — ресурс соединения. Данный ресурс используется для всех следующих операций с MySQL.

Но чтобы выполнить соединение с сервером, необходимо знать как минимум три параметра:

  • Адрес сервера СУБД;
  • Логин;
  • Пароль.

Если вы следовали стандартной процедуре установки MySQL или используете OpenServer, то адресом сервера будет localhost, логином — root. При использовании OpenServer пароль для подключения — это пустая строка ‘’, а при самостоятельной установке MySQL пароль вы задавали в одном из шагов мастера установки.

Базовый синтаксис функции mysqli_connect():

mysqli_connect(, , , );

Проверка соединения

Первое, что нужно сделать после соединения с СУБД — это выполнить проверку, что оно было успешным.
Эта проверка нужна, чтобы исключить ошибку при подключении к БД. Неверные параметры подключения, неправильная настройка или высокая нагрузка заставит MySQL отвеграть новые подключения. Все эти ситуации приведут к невозможности соединения, поэтому программист должен проверить успешность подключения к серверу, прежде чем выполнять следующие действия.

Соединение с MySQL устанавливается один раз в сценарии, а затем используется при всех запросах к БД.
Результатом выполнения функции mysqli_connect() будет значение специального типа — ресурс.
Если подключение к MySQL не удалось, то функция mysqli_connect() вместо ресурса вернет логическое значение типа «ложь» — false.
Хорошей практикой будет всегда проверять значение результа выполнения этой функции и сравнивать его с ложью.

Соединение с MySQL и проверка на ошибки:

Функция mysqli_connect_error() просто возвращает текстовое описание последней ошибки MySQL.

Установка кодировки

Первым делом после установки соединения крайне желательно явно задать кодировку, которая будет использоваться при обмене данными с MySQL. Если этого не сделать, то вместо записей со значениями, написанными кириллицей, можно получить последовательность из знаков вопроса: ‘?????????????????’.
Вызови эту функцию сразу после успешной установки соединения: mysqli_set_charset($con, "utf8");

Выполнение запросов

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

Два вида запросов

Следует разделять все SQL-запросы на две группы:

  1. Чтение информации (SELECT).
  2. Модификация (UPDATE, INSERT, DELETE).

При выполнении запросов из среды PHP, запросы из второй группы возвращают только результат их исполнения: успех или ошибку.
Запросы первой группы при успешном выполнении возвращают специальный ресурс результата. Его, в свою очередь, можно преобразовать в ассоциативный массив (если нужна одна запись) или в двумерный массив (если требуется список записей).

Добавление записи

Вернёмся к нашему проекту — дневнику наблюдений за погодой. Начнём практическую работу с заполнения таблиц данными. Для начала добавим хотя бы один город в таблицу cities.

Выражение INSERT INTO используется для добавления новых записей в таблицу базы данных.

Составим корректный SQL-запрос на вставку записи с именем города, а затем выполним его путём передачи этого запроса в функцию mysqli_query(), чтобы добавить новые данные в таблицу.

Обратите внимание, что первым параметром для функциии mysqli_query() передаётся ресурс подключения, полученный от функции mysqli_connect(), вторым параметром следует строка с SQL-запросом.
При запросах на изменение данных (не SELECT) результатом выполнения будет логическое значение — true или false.
false будет означать, что запрос выполнить не удалось. Для получения строки с описанием ошибки существует функция mysqli_error($link).

Функция insert id: как получить идентификатор добавленной записи

Следующим шагом будет добавление погодной записи для нового города.
Погодные записи хранит таблица weather_log, но, чтобы сослаться на город, необходимо знать идентификатор записи из таблицы cities.
Здесь пригодится функция mysqli_insert_id().
Она принимает единственный аргумент — ресурс соединения, а возвращает идентификатор последней добавленной записи.

Теперь у нас есть всё необходимое, чтобы добавить погодную запись.
Вот как будет выглядеть комплексный пример с подключением к MySQL и добавлением двух новых записей:

Вывод одиночной строки (использование одномерного массива)


С начала создадим функцию, с помощью которой в PHP получим нужную строку, а затем выведем ее на HTML-страницу.

Для этого, как было ранее сказано, будем использовать тот же самый SQL-запрос, который рассматривался в предыдущей статье, а именно: "SELECT * FROM `url` WHERE `url`='poluchity-skidku'". Только вместо конкретного наименования таблицы "url", одноименного имени поля "url" и его значения "poluchity-skidku" укажем переменные PHP, скажем, "$table", "$column" и "$value", соответственно.

Данные переменные будут являться параметрами создаваемой функции, что позволит в SQL-запросе применять значения, которые будет указаны при ее вызове. Такое использование переменных в параметрах функции сделает ее универсальной для поиска записей в любой таблице. В данном случае с условием, что поиск записи в таблицах будет выполняться всего лишь по одному значению одного поля.

Аналогичные универсальные функции можно составить и для других вариантов условий, что исключит необходимость каждый раз составлять новые скрипты под конкретные задачи.

Кроме того, при создании функции возьмем за основу код, который был составлен для записи данных в предыдущей статье (рис.9).

Но, теперь будем применять запрос не для ввода, а для вывода данных. К этому добавим также вызов метода "fetch_assoc()" модуля MySQLi PHP для преобразования полученной строки в ассоциативный массив. Для того, чтобы ключами для доступа к значеням его элементов являлись наименования полей таблицы.

После соответствующих преобразований PHP-код функции, в которой будет извлекаться из таблицы первая найденная строка (в нашем случае она единственная), примет следующий вид.

  1. //----Функция вывода одиночной записи-------------

  2. function getLine($table, $column, $value) {

  3. global $mysqli;

  4. if (!$result = $mysqli->query("SELECT * FROM `$table` WHERE `$column`='$value'")) {

  5. die ('При извлечении записей возникла ошибка: '.$mysqli->errno.' - '.$mysqli->error);

  6. }

  7. return $result->fetch_assoc();

  8. }

  9. ?>

Рис.1 Функция вывода одиночной строки

Если сравнить этот код с предыдущей функцией, то можно увидеть некоторые изменения и дополнения, которые заключаются в следующем:

  • заменено название функции и ее параметры (поз.3) - теперь она обозначается "getLine", а в качестве параметров используются значения переменных "$table", "$column" и "$value";
  • в методе выполнения запроса к базе данных "query" модуля MySQLi PHP (поз.5) теперь применен SQL-запрос на вывод данных с условием, что значение переменной поля "$column" выбранной строки должно соответствовать значению "$value";
  • заменен текст сообщения (поз.6), который выводиться на экран браузера в случае возникновении ошибки при выполнении запроса;

В итоге, с помощью вызова объектом "$result" метода "fetch_assoc()" (поз.8) будет возвращена найденная запись в виде ассоциативного массива.

А теперь содержимое этого массива с помощью PHP-кода перенесем на HTML-страницу. И сделаем это, разместив в начале главной страницы в файле "index.php" следующий PHP-код:

  1. echo "Проверка вывода одиночной строки:";

  2. $table = "url";

  3. $column = "url";

  4. $value = "poluchity-skidku";

  5. $data_bd = getLine($table, $column, $value);

  6. $id = $data_bd["id"];

  7. $title = $data_bd["title"];

  8. $file = $data_bd["file"];

  9. $url = $data_bd["url"];

  10. echo nl2br("\n".$id."/".$title."/".$file."/".$url);

  11. ?>

Рис.2 PHP-код для переноса одиночной строки на страницу сайта

Здесь, в начале переменным "$table", "$column" и "$value", которые будут использоваться в качестве параметров функции, присваиваются нужные значения (поз. 3÷5).

Затем осуществляется вызов функции "getLine()" (поз.6), а после ее выполнения происходит перенос значений элементов массива в соответствующие переменные PHP (поз. 7÷10).

И таким образом, с помощью языковой конструкции "echo" и функции обработки строк "nl2br" (поз.11) мы сможем отобразить полученный результат на одной из страниц нашего сайта. Функции "nl2br" здесь применена для вставки тега "‹br›", для перевода строк, имеющих регулярные выражения "\n".

Если после всех выполненных действий обновить главную страницу, то мы должны увидеть на ней результат вывода одиночной строки в соответствии с заданным условием, как показано на скриншоте.

Скриншот вывода одиночной строки

Рис.3 Скриншот вывода одиночной строки

Как видно, здесь через дробь по порядку отображаются значения полей выбранной записи, где полю "id" соответствует значение 4, "title" - "Получить скидку", а "file" - "righting.php". Что и требовалось получить для этого варианта.

Вывод набора строк по заданному условию (использование двумерного массива)


В предыдущем примере мы рассмотрели случай, когда требуется извлечь только одну уникальную запись. Но, что делать, если при выполнении запроса к базе данных "query" в полученном объекте "$result" будет не одна, а множество строк?

В этом случае при выполнении метода "fetch_assoc()" следует использовать указатель текущей позиции, который при каждой следующей операции считывания сдвигается на одну позицию вперед. Если же строки закончатся, то указатель на несуществующей строке возвратит значение "false".

А для перебора всех найденных записей при выполнении метода "fetch_assoc()" обычно используется оператор цикла "while", который обеспечивает выполнение вложенного выражения до тех пор, пока выражение в самом "while" является "TRUE" (в нашем случае, пока не закончатся извлекаемые строки).

Ниже показан PHP-код с внесенными дополнениями, который позволяет функции работать уже не с одной, а с набором строк (позиции с дополнениями или изменениями по сравнению с предыдущим вариантом выделены светлым фоном).

  1. //----Функция вывода набора строк по заданному условию-------------

  2. function getUrlDesс($url_1, $url_2, $url_3) {

  3. global $mysqli;

  4. if (!$result = $mysqli->query("SELECT * FROM `url` WHERE `url`='$url_1' OR `url`='$url_2' OR `url`='$url_3' ORDER BY `id` DESC")) {

  5. die ('При извлечении записей возникла ошибка: '.$mysqli->errno.' - '.$mysqli->error);

  6. }

  7. $array = array();

  8. while (($row = $result->fetch_assoc()) != false) {

  9. $array[] = $row;

  10. }

  11. return $array;

  12. }

  13. ?>

Рис.4 Функция вывода набора строк по заданному условию

Здесь следует обратить внимание на объявление в качестве массива новой переменной "$array" (поз.8), в котором будут размещаться все найденные записи.

А, далее, в цикле "while" (поз. 9÷11) при каждом обращении к методу "fetch_assoc()" через промежуточную переменную "$row" в этот массив будет записываться данные очередной строки. Причем, одним из ключей массива будет порядковый номер строки (по умолчанию начиная от нуля), а второй - названия полей таблицы.

Таким образом мы получим двумерный массив со всеми записями, которые удовлетворяют условию, указанному в запросе (поз.5). В данном случае SQL-запрос полностью повторяет тот, который использовался в предыдущей статье, а именно: "SELECT * FROM `url` WHERE `url`='poluchity-skidku' OR `url`='statistika-ugonov' OR `url`='kontakti' ORDER BY `id` DESC". Исключение составляет лишь то, что вместо конкретных значений полей в нем указаны переменные "$url_1", "$url_2" и "$url_3".

В итоге, после выполнения такой функции будет возвращен двумерный массив (поз.12), в котором будут находиться все полученные данные по заданному условию.

А, теперь, составив небольшой PHP-скрипт, изображенный на рис.5, перенесем содержимое этого массива на HTML-страницу.

  1. echo nl2br("\n\nПроверка вывода набора строк по заданному условию:");

  2. $url_1 = "poluchity-skidku";

  3. $url_2 = "statistika-ugonov";

  4. $url_3 = "kontakti";

  5. $data_bd = getUrlDesс($url_1, $url_2, $url_3);

  6. for ($i = 0; $i count($data_bd); $i++) {

  7. $id = $data_bd[$i]["id"];

  8. $title = $data_bd[$i]["title"];

  9. $file = $data_bd[$i]["file"];

  10. $url = $data_bd[$i]["url"];

  11. echo nl2br("\n".$id."/".$title."/".$file."/".$url);

  12. }

  13. ?>

Рис.5 PHP-код для переноса набора строк на страницу сайта

В отличие от первого варианта, здесь для перебора всех элементов массива используется оператор цикла "for" (поз. 7÷13), в теле которого вывод каждой строки будет выполняться по значению переменной "$i" и наименованию полей.

Обновив главную страницу получим результат, изображенный на следующем скриншоте.

Скриншот вывода набора строк по заданному условию

Рис.6 Скриншот вывода набора строк по заданному условию

Здесь видно, что теперь выведены данные трех срок, которые удовлетворяют заданному условию, причем, размещены они, как и требуется, в порядке убывания по значению поля "id".

При этом, можно сравнить этот результат с тем, который мы получили по аналогичному SQL-запросу в предыдущей статье, и убедиться в том, что они полностью совпадают.