- Php mysql массив строка
- Объектно-ориентированный стиль
- Список пользователей
- Процедурный стиль
- Список пользователей
- Получение строки данных в виде массива. Функции mysqli_fetch_array() (или mysql_fetch_array())
- mysqli_fetch_array
- Список параметров
- Возвращаемые значения
- Примеры
- Смотрите также
- User Contributed Notes
- Как хранить массивы в базе данных
- 5 последних уроков рубрики «PHP»
- Фильтрация данных с помощью zend-filter
- Контекстное экранирование с помощью zend-escaper
- Подключение Zend модулей к Expressive
- Совет: отправка информации в Google Analytics через API
- Подборка PHP песочниц
Php mysql массив строка
Для получения данных в MySQL применяется команда SELECT . Например, получение всех данных из таблицы Users:
Рассмотрим получение данных на примере таблицы Users, созданной в прошлых, которая имеет следующее определение:
CREATE TABLE Users (id INTEGER AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30), age INTEGER)
Объектно-ориентированный стиль
При выполнении команды SELECT метод query() объекта mysqli возвращает набор полученных строк, который мы можем перебрать с помощью цикла. Например, перебор с помощью цикла foreach :
$sql = "SELECT * FROM Users"; if($result = $conn->query($sql)) < foreach($result as $row)< $userid = $row["id"]; $username = $row["name"]; $userage = $row["age"]; >>
Здесь $result представляет набор строк. Каждый его элемент, который передается в переменную $row , хранит данные отдельной строки в виде ассоциативного массива, где ключи элементов — названия столбцов.
Вместо цикла foreach также можно использовать другие виды циклов. Например, применение цикла while :
$sql = "SELECT * FROM Users"; if($result = $conn->query($sql))< while($row = $result->fetch_array()) < $userid = $row["id"]; $username = $row["name"]; $userage = $row["age"]; >>
В данном случае метод $result->fetch_array() выбирает текущую строку из набора в переменную $row и переходит к следующей. Когда строк не останется, метод возвратит false , и произойдет выход из цикда. Полученное значени $row опять же представляет строку в виде ассоциативного массива.
После окончания работы с полученным набором строк мы можем очистить отведенную для него память с помощью метода free() :
Теперь посмотрим на примере. Определим скрипт index.php , которая будет выводить значения из таблицы Users:
Список пользователей
connect_error)< die("Ошибка: " . $conn->connect_error); > $sql = "SELECT * FROM Users"; if($result = $conn->query($sql))< $rowsCount = $result->num_rows; // количество полученных строк echo "Получено объектов: $rowsCount
"; echo "
Id | Имя | Возраст |
---|---|---|
" . $row["id"] . " | "; echo "" . $row["name"] . " | "; echo "" . $row["age"] . " | "; echo "
Таким образом, при обращении к скрипту index.php браузер отобразит список данных, полученных из БД:
Дополнительно стоит отметить, что с помощью свойства $result->num_rows мы можем получить количество строк, извлеченных из БД.
Процедурный стиль
При процедурном стиле функция mysqli_query() при успешном выполнении команды SELECT возвращает набор строк, который можно перебрать с помощью цикла:
$sql = "SELECT * FROM Users"; if($result = mysqli_query($conn, $sql)) < foreach($result as $row)< $userid = $row["id"]; $username = $row["name"]; $userage = $row["age"]; >>
Как и при объектно-ориентированном подходе, полученные строки представляют ассоциативные массивы, где ключи элементов — названия столбцов.
Пример перебоа с помощью цикла while :
$sql = "SELECT * FROM Users"; if($result = mysqli_query($conn, $sql)) < while($row = mysqli_fetch_array($result))< $userid = $row["id"]; $username = $row["name"]; $userage = $row["age"]; >>
Функция mysqli_fetch_array() выбирает текущую строку из набора в переменную $row и переходит к следующей. Когда строк не останется, метод возвратит false , и произойдет выход из цикла.
После окончания работы с полученным набором строк мы можем очистить отведенную для него память с помощью функции mysqli_free_result() , в которую передается полученный набор строк:
Список пользователей
$sql = "SELECT * FROM Users"; if($result = mysqli_query($conn, $sql))< $rowsCount = mysqli_num_rows($result); // количество полученных строк echo "Получено объектов: $rowsCount
"; echo "
Id | Имя | Возраст |
---|---|---|
" . $row["id"] . " | "; echo "" . $row["name"] . " | "; echo "" . $row["age"] . " | "; echo "
Получение строки данных в виде массива. Функции mysqli_fetch_array() (или mysql_fetch_array())
Функция mysqli_fetch_array() (mysql_fetch_array()) используется для получения одной строки из результирующего набора, которую она помещает в массив. При этом можно получить как ассоциативный массив, так и массив с числовыми индексами. Кроме того, можно вернуть сразу оба типа массива, передав соответствующий параметр.
Так как функция mysql_fetch_array() сейчас является устаревшей и имеет статус «depricated», то рекомендуется в коде использовать ее модификацию — mysqli_fetch_array(). При этом разницы в использовании практически нет никакой.
Данную функцию можно использовать в «объектно-ориентированном» или «процедурном» стиле. Рассмотрим сначала «объектно-ориентированный» стиль. Допустим у нас имеется база данных «my_dbbase», в которой есть таблица «users». Из нее нам необходимо достать 10 строк (id пользователя и его имя) и вывести эти данные построчно:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
//создаем и выполняем запрос к таблице пользователей $query = "SELECT id, name FROM users ORDER BY id LIMIT 10"; $result = $mysqli->query($query); //выводим данные while($row = $result->fetch_array()) < echo $row['id']." ".$row['name']."
"; > // очищаем result-объект $result->close(); // закрываем соединение $mysqli->close();
В данном примере мы использовали константу MYSQLI_ASSOC, чтобы получить данные в виде ассоциативного массива. Ключом при этом будет является название колонки в таблице. Если же нам нужен обычный массив с числовыми ключами, то можно использовать константу MYSQLI_NUM:
while($row = $result->fetch_array(MYSQLI_NUM)) < echo $row[0]." ".$row[1]."
"; >
Но в большинстве случаев использование ассоциативного массива все же более оправдано, т.к. код при этом становится более читабельным (мы четко видим, какой элемент мы используем). Единственное, о чем здесь нужно помнить, что если вы делаете выборку из нескольких таблиц одним запросом, то в случае совпадения имен колонок, они будут перетираться. В этом случае целесообразно использовать алиасы для колонок.
Существует и второй способ использования функции mysqli_fetch_array — процедурный:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
//создаем и выполняем запрос к таблице пользователей $query = "SELECT id, name FROM users ORDER BY id LIMIT 10"; $result = mysqli_query($connectLink, $query); //преобразуем данные в ассоциативный массив, выводим их построчно while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) < echo $row['id']." ".$row['name']."
"; > // очищаем result-объект mysqli_free_result($result); // закрываем соединение mysqli_close($connectLink);
Каждый раз, когда мы выполняем
$row = mysqli_fetch_array($result, MYSQLI_ASSOC)
, то в $row помещается новая строка из выборки, а указатель в результирующей выборке при этом смещается на следующую строку. Таким образом, мы можем пройтись по всем строкам.
Какой способ выбрать — решать вам.
mysqli_fetch_array
Выбирает одну строку данных из набора результатов и возвращает её в виде массива. Каждый последующий вызов этой функции будет возвращать следующую строку в наборе результатов или null , если строк больше нет.
Помимо хранения данных в числовых индексах массива результатов, функция также может сохранять данные в ассоциативных индексах, используя имена полей набора результатов в качестве ключей.
Если два и более столбца результата имеют одинаковое имя, последний столбец будет иметь приоритет и перезапишет любые предыдущие данные. В таких ситуациях для доступа к данным всех столбцов с одинаковыми именами лучше пользоваться обычными массивами, индексированными номерами столбцов.
Замечание: Имена полей, возвращаемые этой функцией являются зависимыми от регистра.
Замечание: Эта функция устанавливает NULL-поля в значение null PHP.
Список параметров
Этот необязательный параметр принимает значение константы, которая указывает на тип массива, в который требуется поместить данные. Возможные значения параметра: MYSQLI_ASSOC , MYSQLI_NUM или MYSQLI_BOTH .
При использовании константы MYSQLI_ASSOC функция будет вести себя идентично mysqli_fetch_assoc() , а при MYSQLI_NUM идентично функции mysqli_fetch_row() . При задании MYSQLI_BOTH функция создаст один массив, включающий атрибуты обоих вариантов.
Возвращаемые значения
Возвращает массив, представляющий выбранную строку, null , если в наборе результатов больше нет строк или false в случае возникновения ошибки.
Примеры
Пример #1 Пример использования mysqli_result::fetch_array()
mysqli_report ( MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT );
$mysqli = new mysqli ( «localhost» , «my_user» , «my_password» , «world» );
$query = «SELECT Name, CountryCode FROM City ORDER BY ID LIMIT 3» ;
$result = $mysqli -> query ( $query );
/* числовой массив */
$row = $result -> fetch_array ( MYSQLI_NUM );
printf ( «%s (%s)\n» , $row [ 0 ], $row [ 1 ]);
/* ассоциативный массив */
$row = $result -> fetch_array ( MYSQLI_ASSOC );
printf ( «%s (%s)\n» , $row [ «Name» ], $row [ «CountryCode» ]);
/* ассоциативный и числовой массивы */
$row = $result -> fetch_array ( MYSQLI_BOTH );
printf ( «%s (%s)\n» , $row [ 0 ], $row [ «CountryCode» ]);
mysqli_report ( MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT );
$mysqli = mysqli_connect ( «localhost» , «my_user» , «my_password» , «world» );
$query = «SELECT Name, CountryCode FROM City ORDER by ID LIMIT 3» ;
$result = mysqli_query ( $mysqli , $query );
/* числовой массив */
$row = mysqli_fetch_array ( $result , MYSQLI_NUM );
printf ( «%s (%s)\n» , $row [ 0 ], $row [ 1 ]);
/* ассоциативный массив */
$row = mysqli_fetch_array ( $result , MYSQLI_ASSOC );
printf ( «%s (%s)\n» , $row [ «Name» ], $row [ «CountryCode» ]);
/* ассоциативный и числовой массивы */
$row = mysqli_fetch_array ( $result , MYSQLI_BOTH );
printf ( «%s (%s)\n» , $row [ 0 ], $row [ «CountryCode» ]);
Результат выполнения данных примеров:
Kabul (AFG) Qandahar (AFG) Herat (AFG)
Смотрите также
- mysqli_fetch_assoc() — Выбирает следующую строку из набора результатов и помещает её в ассоциативный массив
- mysqli_fetch_column() — Получает один столбец из следующей строки набора результатов
- mysqli_fetch_row() — Выбирает следующую строку из набора результатов и помещает её в обычный массив
- mysqli_fetch_object() — Выбирает следующую строку из набора результатов в виде объекта
- mysqli_query() — Выполняет запрос к базе данных
- mysqli_data_seek() — Перемещает указатель результата на выбранную строку
User Contributed Notes
Как хранить массивы в базе данных
При работе с базой данных MySQL иногда нужно сохранить массив в одном поле. К сожалению, нет способа непосредственно передать массив как параметр. В результате, хранение таких структур данных становиться более сложным процессом, но, тем не менее, возможным.
Чтобы конвертировать любой массив (или объект) в строку в PHP, нужно вызвать функцию serialize :
$array = array( 1, 2, 3 ); $string = serialize( $array ); echo $string;
$string содержит строчную версию массива. Выше приведенный пример выведет следующее:
Чтобы конвертировать такую строку обратно в массив, надо использовать unserialize :
// $array будет содержать( 1, 2, 3 ) $array = unserialize( $string );
Теперь проведём конвертацию массива из 200 случайно генерированных целых чисел в диапазоне от 1 до 1000:
Пример выведет подобную строку:
Данная строка может быть сохранена в базе данных и конвертирована в массив по мере надобности. Очень часто функция base64_encode используется в сочетании с функцией serialize для хранения массивов:
$string = base64_encode( serialize( $array ) );
Зашифрованная строка может быть восстановлена в массив с помощью функции base64_decode :
$array = unserialize( base64_decode( $string ) );
К сожалению, такие строки могут иметь очень большой размер. В таком случае можно использовать функцию gzcompress для сжатия строки (размер сжатой строки существенно меньше):
$smallString = gzcompress( $string );
Перед использованием, такую строку надо вернуть к обычному виду с помощью функции gzuncompress .
Вот и все, что может пригодиться при решении вопроса хранения массива в базе данных.
Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.lateralcode.com/store-array-database/
Перевел: Сергей Фастунов
Урок создан: 3 Сентября 2010
Просмотров: 97387
Правила перепечатки
5 последних уроков рубрики «PHP»
Фильтрация данных с помощью zend-filter
Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.
Контекстное экранирование с помощью zend-escaper
Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.
Подключение Zend модулей к Expressive
Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.
Совет: отправка информации в Google Analytics через API
Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.
Подборка PHP песочниц
Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.