|
Программирование >> Программный интерфейс приложений
print ( количество возвращенных строк: %d\n raysql nura rows ($result)); while ($row = raysql fetch row ($result)) for ($1 =0; $i < raysql num fields (Sresult); Si++) { if ($1 > 0) print ( , ); print ( $ row 1$1 ] ) ; print ( \n ) ; raysql free result ($result); He рассчитывайте априори, что mysqi querY () отрабатывает успешно Очень часто начинающие пользователи РНР задают вопрос о происхождении такого сообщения в момент выполнения сценария: Warning: О is not а MySQL result index m file on line n Предупреждение: 0 не является результирующим индексом в строке п файла Это сообщение свидетельствует о том, что какой-то функции было передано значение идентификатора результирующего набора, равное О (такой, например, как функции выборки строк). И эта функция ожидает получения правильного результирующего набора. Это означает, что предыдущий вызов функции mysql query () вернул О, т. е. значение false . Другими словами, функция mysql query () завершилась с какой-то ошибкой, и автор сценария не позаботился о том, чтобы проверить полученный от нее результат перед вызовом другой функции. При работе с функцией mysql query () всегда проверяйте возвращаемое значение. Если этот запрос завершается неуспешно, будет получено значение FALSE , о чем будет выдано диагностическое сообщение. (В зависимости от обстоятельств может быть и другая реакция на ошибку.) Если запрос отрабатывает успешно, функция mysql query () возвращает идентификатор результирующего набора. Он нам может пригодиться в различных аспектах (но только не как счетчик!). Идентификатор результирующего набора можно использовать следующим образом. Передать функции mysql num rows () для определения количества строк в результирующем наборе. Передать функции mysql num f ields {) для определения количества столбцов в результирующем наборе. Передать процедуре выборки строк результирующего набора. В примере для этой цели используется функция mysql fetch row(), но существуют и другие варианты. Они будут показаны ниже. Передать функции mysql f ree result () для того, чтобы очистить результирующий набор и все ресурсы, связанные с ним. Язык РНР имеет несколько функций выборки данных из результирующего набора после успешного завершения функцией mysql query () запроса SELECT (табл. 8.1). Любая из этих функций принимает в качестве аргумента идентификатор результирующего набора и возвращает значение FALSE , если больше строк нет. Таблица 8.1. Функции выборки строк языка РНР Имя функции Возвращаемое значение
Основной функцией является функция mysql f etch row (), возвращающая как массив следующую строку результирующего набора. Доступ к элементам массива осуществляется с помощью числового индекса в диапазоне от 0 до mysql num f ields ()-1. Покажем, как функция mysql fetch row {) используется в простейшем цикле, производящем построчную выборку и печать; $query = SELECT * FROM president ; Sresult = mysql query (Squery) or die ( Ошибка запроса ); wl-iile (Srow = mysql fetch row (Sresult)) { for (Si = 0; Si < mysql num fields (Sresult); Si++) { if (Si > 0) print ( \t ); print (Srow[Si]) print ( \n ); Переменная $row является массивом. Доступ к его элементам производится как $row[$i], где $i - числовой индекс столбца. Если вам известна функция count О , вы можете захотеть воспользоваться ею для определения количества элементов в каждой строке вместо функции mysql num fields (). Ни в коем случае не делайте этого. Функция count () считает количество установленных элементов в массив, но РНР не устанавливает элементы, которые соответствуют столбцам, имеющим значения NULL . Поэтому функция count () будет не самым лучшим решением для возвращенных столбцов, так как она и не предназначалась для вьшолнения этой задачи. Это справедливо и для двух других функций выборки. Вторая функция выборки, приведенная в табл. 8.1, mysql fetch array О, аналогична функции mysql f etch row {), но доступ к ее Элементам можно осуществить с помощью цифрового или ассоциативного индекса. Другими словами, доступ к элементам массива можно производить по номеру или по имени: $qi\ery = select last name, first name from president ; $reSult = mysql query ($query) or die ( Ошибка запроса ); while ($row = mysql fetch array ($result)) { printf ( %s %s\n , $row[0], $row[l]); printf ( %s%s\n , $row[ first name ], $row[ last name ]); Функция mysql fetch array() no сравнению с функцией mysql fetchrowO возвращает расщиренный набор информации. Несмотря на это, различие между двумя функциями в производительности мизерно. Для этих целей можно воспользоваться функцией mysqlfetcharray (). Ни к каким существенным потерям производительности это не приведет. Третья функция выборки - mysql fetch object () - возвращает следующую строку результирующего набора как объект. Это значит, что доступ к элементам может производиться в соответствии с синтаксисом $row->col name. Например, для того, чтобы выбрать значения last name и first name из таблицы president, к ним необходимо обратиться как $row->last name и $row->first: i Проверка результатов запроса на значения null й Проверка значений, возвращаемых запросом select на значение null , Е производится с помощью функции isset (). Например, при проверке строк в I. массиве $row isset ($row[$i]) возвращается false , если $row[$i] , соответствует значению null , и true , если значение не соответствует Р null . Родственной функцией является функция empty (). Но empty () воз- li вращает один и тот же результат как для null , так и для пустых строк. По- I этому она не очень может пригодиться для проверки на значение null . $query = select last name, first name from president ; $result = mysql query ($query) or die ( Ошибка запроса ); while ($row = mysql fetch ob]ect ($result)) printf ( %s %s\n , $row->first name, $row->last name); Что, если запрос содержит вычисляемые выражения? Например, запрос может возвращать значения, которые вычисляются в выражениях: select concat(first name, , last name) from president Такой запрос нельзя обрабатывать с помощью функции mysql fetchobject (). Именем выбранного столбца будет имя выражения, которое не является допустимым именем свойства. Однако допустимое имя можно присвоить с помощью псевдонима. Вот запрос, который присваивает псевдоним full name, позволяющий осуществить доступ с по-
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |