Mysql fetch array что делает. Синтаксис и пример применения

MySQL fetch array обрабатывает результаты выборки из базы данных и возвращает в качестве результата обычный, ассоциативный или оба массива сразу. Фактически MySQL fetch - это трансляция информации, полученной по запросу к базе, в удобную для обработки форму.

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

Синтаксис и пример применения

На вход PHP MySQL fetch array поступает результат запроса и может быть указан формат желаемого результата:

  • MYSQL_ASSOC;
  • MYSQL_NUM;
  • MYSQL_BOTH.

В первом случае будет сформирован ассоциативный массив, во втором случае - массив с численными индексами, а в последнем случае будет доступен массив с индексами обоих типов.

В результате исполнения $aFetch = mysqli_fetch_array($cResult) будет создан массив $aFetch.

В данном примере MySQL fetch array обрабатывает исходные данные (1). В таблице всего четыре записи для каждой выполняется различные варианты fetch. Результат обработки выборки (2) сшивается в строки данных (3): $cFetch, $cFetch1, $cFetch2, $cFetch3.

По результатам видно, что без указания констант MYSQL_ASSOC, MYSQL_NUM и MYSQL_BOTH получается такой же результат, как и в случае MYSQL_BOTH. Эти константы считаются устаревшими и их использование не рекомендуется.

Использование MySQL fetch array

Использование выборки по результатам запроса в формате массива очень удобно в программах на PHP. Функционал доступа к базе MySQL предоставляет безопасные и надёжные методы доступа.

Ошибку уровня warning MySQL fetch array генерирует только в ситуации, когда $cResult отсутствует или недействителен, а следовательно, подключение к базе данных не состоялось. Имя $cResult может быть любым, здесь оно использовано в контексте примера. В запросе (2):

  • $cResult = mysqli_query($this->iConnectId, $cQuery);

переменная $this->iConnectId - это активное соединение с базой данных, оформленное в формате многофункционального объекта.

Инструмент MySQL fetch array - простое и эффективное средство, но всё же его использование удобно выполнять объектно-ориентированным способом.

Объект доступа к базе данных

MySQL - предельно простой и эффективный инструмент для организации информации. Базы данных MySQL за все время своего применения показали себя надёжным и эффективным средством для хранения и доступа к данным.

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

Конструкция MySQL fetch на реальной практике достаточно громоздка, особенно когда необходимо выполнить выборку информации из одной таблицы основной информации, например, штатного расписания, а затем из других таблиц выбирать данные по сотрудникам:

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

Как правило, эти данные будут заполнены не по всем сотрудникам, а к тому же если вводить в таблицу штатного расписания частности по каждой строке, это сделает её громоздкой и неудобной в использовании.

Уровень к базе данных

Сфера применения MySQL fetch - трансформация данных в массив. Это можно выполнить на уровне методов объекта базы данных. В этом случае разработчик создаёт для себя инструмент высокого уровня, который предоставляет доступ к любой таблице базы данных одинаковым образом.

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

Это очень удобно, и необходимость писать громоздкие конструкции, создавая прецедент для возможной ошибки, отпадает. Особенно важно: такой подход упрощает вероятные модификации структуры базы данных, поскольку за пределы объекта доступа к базе данных они не выходят. При необходимости нужно будет переделать только объект доступа к базе данных, а не весь функционал сайта.

Ещё более удобно над объектом доступа к базе данных надстроить объекты реального назначения. Например, штатное описание, которое обладает свойствами: список, вывод данных по сотруднику, изменение карточки сотрудника и т. д. Инструменты доступа к данным скрываются в недрах методов реальных объектов, что упрощает работу разработчика и повышает качество результата.

Получение определенного поля результата.

Синтаксис:

Int mysql_result(int result, int row [, mixed field])

Функция возвращает значение поля field в строке результата с номером row . Параметр field может задавать не только имя поля, но и его номер - позицию, на которой столбец "стоял" при создании таблицы, а также полное имя поля вида: "имя_таблицы.имя_поля". Тем не менее, рекомендуется везде, где это только возможно,использовать именно имена полей.

Функция универсальна: с ее помощью можно "обойти" весь результат по одной ячейке. И хотя это не возбраняется, но делать, однако, не рекомендуется, т.к. mysql_result() работает довольно медленно.

mysql_fetch_array

Извлекает из результата очередную запись и помещает ее в ассоциативный массив.

Синтаксис:

Array mysql_fetch_array(int result [, int result_type])

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

Параметр result_type задает вид возвращаемого массива и может принимать одно из следующих значений: MYSQL_NUM , MYSQL_ASSOC , MYSQL_BOTH (по умолчанию).

Может возникнуть вопрос: зачем вообще нужны числовые индексы. Ответ прост: дело в том, что в результате выборки в действительности могут присутствовать поля (фактически, колонки) с одинаковыми именами, но, соответственно, с различными индексами. Это происходит тогда, когда выборка в SELECT производится одновременно из нескольких таблиц.

Mysql_connect($host, $user, $pass); $result=mysql_db_query("database", "select id, name from tabl"); while($row=mysql_fetch_array($result)) { echo "id: ".$row["id"]."
"; echo "id: ".$row."
"; echo "name: ".$row["name"]."
"; echo "name: ".$row."
"; }; mysql_free_result($result);

mysql_fetch_row

Записывает запись в нумерованный массив.

Синтаксис:

Array mysql_fetch_row(int result)

Функция возвращает массив-список со значениями полей очередной строки результата result . Если указатель текущей позиции результата был установлен за последней записью (то есть строки кончились), возвращается false. Текущая позиция сдвигается к следующей записи, так что очередной вызов mysql_fetch_row() вернет следующую строку результата.

Каждое поле записи сохраняется в нумерованном элементе массива. Нумерация начинается с 0.

$r=mysql_query("select * from OutTable where age

Как видим, цикл оборвется, как только строки закончатся, т.е. когда mysql_fetch_row() вернет false.

mysql_fetch_object

Получение записи в свойствах объекта.

Синтаксис:

Object mysql_fetch_object(int result)

Функция возвращает объект, в свойствах которого находятся поля текущей записи. В случае, если записи кончились, возвращает false.

Mysql_connect($host, $user, $pass); $result=mysql_db_query("database", "select * from table"); while($rows=mysql_fetch_object($result)) { echo $rows->id; echo $rows->name; };

mysql_fetch_lengths

Возвращает длину элемента записи.

Синтаксис:

Array mysql_fetch_lengths(int result)

Функция mysql_fetch_lengths() возвращает длину значения, полученного при помощи функций mysql_fetch_row() , mysql_fetch_array() или mysql_fetch_object() .

Например, в следующем примере:

$arr=mysql_fetch_row($result); $len=mysql_fetch_lengths($result);

массив $len будет содержать длину соответствующих элементов массива $arr , т.е. $len=strlen(arr) и т.д.

mysql_fetch_field

Возвращает информацию о свойствах объекта и о поле записи.

Синтаксис:

Object mysql_fetch_field(int result [, int field_offset])

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

Возвращаемый объект имеет следующие свойства:

  • name - имя поля
  • table - имя таблицы, которой принадлежит поле
  • max_length - максимальная длина поля
  • not_null - 1, если полю разрешено пустое значение
  • primary_key - 1, если поле является ключевым
  • unique_key - 1, если в поле допускаются только уникальные значения
  • multiple_key - 1, если в поле допустимо иметь повторяющиеся значения
  • numeric - 1, если поле числовое
  • blob - 1, если поле имеет тип BLOB
  • type - тип поля
  • unsigned - 1, если поле числовое беззнаковое
  • zerofill - 1, есле поле заполняется нулями
mysql_connect($host,$user,$pass); $result=mysql_db_query("database", select * from table"); for($i=0;$i "; $param=mysql_fetch_field($result); if(!$param) echo "Нет информации о свойствах!"; echo " name: $param->name table: $param->table max_length: $param->max_length not_null: $param->not_null primary_key: $param->primary_key unique_key: $param->unique_key multiple_key: $param->multiple_key numeric: $param->numeric blob: $param->blob type: $param->type unsigned: $param->unsigned zerofill: $param->zerofill "; }

mysql_field_seek

Производит перемещение курсора к указанному полю.

Синтаксис:

Int mysql_field_seek(int result, int field_offset)

Данная функция является излишней. Следующие фрагменты будут эквивалентны:

$param=mysql_fetch_field($result, field_offset);

Mysql_field_seek($result, field_offset); $param=mysql_fetch_field($result);

mysql_field_name

Возвращает имя поля.

Синтаксис:

String mysql_field_name(int result, int filed_index)

Функция mysql_field_name() возвращает имя поля, которое расположено в результате result с индексом filed_index (нумерация начинается с 0).

$result=mysql_query("SELECT id, name from table"); echo mysql_field_name($result,1); // Выведет: name

mysql_field_table

Возвращает имя таблицы, из которой было извлечено поле.

Синтаксис:

String mysql_field_table(int result, int field_offset)

Возвращает имя таблицы, из которой было извлечено поле со смещением field_offset в результате result .

mysql_field_len

Возвращает длину поля.

Синтаксис:

Int mysql_field_len(int result, int filed_offset)

Функция возвращает длину поля в результате result . Поле, как обычно, задается указанием его смещения. Под длиной здесь подразумевается не размер данных поля в байтах, а тот размер, который был указан при его создании. Например, если поле имеет тип varchar и было создано (вместе с таблицей) с типом varchar(100) , то для него будет возвращено 100.

mysql_field_type

Возвращает тип набора записей в результате.

Синтаксис:

String mysql_field_type(int result, int filed_offset)

Эта функция похожа на mysql_filed_name() , только возвращает не имя, а тип соответствующей колонки в результате. Им может быть, например, int , double , real и т.д.

Mysql_connect($host,$user,$pass); mysql_select_db("mydb"); $result=mysql_query("SELECT * FROM tabl"); $fields=mysql_num_fields($result); $rows=mysql_num_rows($result); $i=0; $table=mysql_field_table($result,$i); echo "Таблица "$table" имеет $fields полей и $rows записей
"; echo "Структура таблицы:
"; while($i"; $i++; }

mysql_field_flags

Эта функция возвращает флаги, которые были использованы при создании указанного поля в таблице.

Синтаксис:

string mysql_field_flags(int result, int field_offset)

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

$Flags=explode(" ",mysql_field_flags($r,$field_offset));

Поля записей в MySQL могут иметь следующие свойства-флаги:

  • "not_nul"
  • "primary_key"
  • "unique_key"
  • "multiple_key"
  • "blob"
  • "unsigned"
  • "zerofill"
  • "binary"
  • "enum"
  • "auto_increment"
  • "timestamp"

mysql_list_fields

Возвращает список полей таблицы.

Синтаксис:

Int mysql_list_fields(string dbname, string tblname [,int link_identifier])

Функция mysql_list_fields() возвращает информацию об указанной таблице tblname в базе данных bdname , используя идентификатор соединения link_identifier , если он задан (в противном случае - последнее открытое соединение). Возвращаемое значение - идентификатор результата, который может быть проанализирован обычными средствами. В случае ошибки возвращается -1, текст сообщения ошибки может быть получен обычным способом.

$link=mysql_connect($host,$user,$pass); $fields=mysql_list_fields("db1", "table", $link); $colums=mysql_num_fields($fields); // число полей в таблице // Далее распечатаем имена всех полей таблицы for($i=0;$i"; }

mysql_num_fields

Эта функция возвращает число полей в одной строке результата, т.е. число колонок в результате.

Синтаксис:

Int mysql_num_fields(int result)

В силу сказанного, функция позволяет определить горизонтальную размерность "двумерного массива результата".

mysql_errno

Возвращает номер последней ошибки.

Синтаксис:

Int mysql_errno ()

Данная функция возвращает номер последней зарегистрированной ошибки или 0, если ошибок нет.

Идентификатор link_identifier можно не указывать, если за время работы сценария было установлено только одно соединение.

Mysql_connect("dbname"); echo mysql_errno().": ".mysql_error()."
";

mysql_error

Возвращает сообщение об ошибке.

Синтаксис:

String mysql_error ()

Эта функция возвращает строку, содержащую текст сообщения об ошибке или пустую строку, если ошибок небыло.

Mysql_connect("dbname"); echo mysql_errno().": ".mysql_error()."
";

$query = "SELECT col1,col2,col3 FROM table WHERE id > 100" $result = _query($query);

для этого действия:

While ($row = mysql_fetch_array($result)){ .... }

это делает 1 цикл (повторяется x раз)?

и для этого:

$row = mysql_fetch_array($result) foreach($row as $r){ ... }

это делает 2 цикла (повторяется x раз)?

где x – количество результатов

РЕДАКТИРОВАТЬ:

хорошо спасибо, ребята, хорошо, я в основном сформулировал этот вопрос, действительно, очень плохо.

в ретроспективе это должно было быть

"mysql_fetch_array () возвращает только одну строку каждый раз, когда она называется"

Я теперь счастлив, что мое понимание mysql_fetch_array () было v. Неверным!

Спасибо за ваше время!

Я предполагаю mysql_fetch_array () perfroms цикл, поэтому меня интересует использование while () в сочетании с ним, если оно сохраняет вложенный цикл.

Нет. mysql_fetch_array просто возвращает следующую строку результата и продвигает внутренний указатель. Он не зацикливается. (Внутри он может или не может использовать какой-то цикл где-то, но это не имеет значения.)

While ($row = mysql_fetch_array($result)) { ... }

Это делает следующее:

  1. строке присваивается $row
  2. выражение оценивается, и если оно оценивается как true , содержимое цикла выполняется
  3. процедура начинается заново
$row = mysql_fetch_array($result); foreach($row as $r) { ... }

Это делает следующее:

  1. mysql_fetch_array извлекает и возвращает следующую строку
  2. строке присваивается $row
  3. foreach петли над содержимым массива и выполняет содержимое цикла столько раз, сколько есть элементов в массиве

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

Учитывая, что возвращается только одна строка, в обоих случаях будет выполнен только один цикл. Хотя он будет проверять, чтобы цикл вводил условие дважды по каждому.

Для первого: ваша программа пройдет цикл один раз для каждой строки в результирующем наборе, возвращаемом запросом. Вы можете заранее знать, сколько результатов есть с помощью mysql_num_rows() .

Для второго: на этот раз вы используете только одну строку набора результатов, и вы делаете что-то для каждого из столбцов . Это то, что делает конструкция языка foreach: она проходит через тело цикла для каждой записи в массиве $row . Количество раз, когда программа будет проходить через цикл, известно заранее: она будет проходить один раз для каждого столбца в наборе результатов (который, предположительно, вы знаете, но если вам нужно его определить, вы можете использовать count($row)) ,

$query = "SELECT col1,col2,col3 FROM table WHERE id > 100" $result = mysql_query($query); if(mysql_num_rows($result)>0) { while($row = mysql_fetch_array()) //here you can use many functions such as mysql_fetch_assoc() and other { //It returns 1 row to your variable that becomes array and automatically go to the next result string Echo $row["col1"]."|".Echo $row["col2"]."|".Echo $row["col2"]; } }

Да, mysql_fetch_array() возвращает только один результат. Если вы хотите получить более одной строки, вам нужно поместить вызов функции в цикл while.

Два примера:

Это приведет только к возврату первой строки

$row = mysql_fetch_array($result);

Это вернет одну строку в каждом цикле, пока в результирующем наборе не будет больше строк

While($row = mysql_fetch_array($result)) { //Do stuff with contents of $row }

Первая строка:

$result = mysql_query($query);

вернуть ресурс php db.

Второй ряд

While ($row = mysql_fetch_array($result))

Циклирует все записи, возвращаемые запросом.

Вместо этого используйте mysql_fetch_assoc
В этом случае строка имеет пары ключ => значение.
В то время как просто поместите это:
print_r($row) и вы поймете
Если вы используете mysql_fetch_assoc, формат строки будет:

$row["column1_name"] = column1_value; $row["column2_name"] = column2_value;

Для этого:

$row = mysql_fetch_assoc($result) foreach ($row as $columnName => $columnValue) { ... }

Вы получите первую строку из запроса, и вы будете перебирать все столбцы в первом результате запроса.

Поделиться: