Программирование >>  Программный интерфейс приложений 

1 ... 133 134 135 [ 136 ] 137 138 139 ... 264


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

fetch

row ()

Массив; доступ к элементам которого осуществляется с помощью числового индекса

mysql

fetch

array()

Массив; доступ к элементам которого осуществляется с помощью числового или ассоциативного индекса

mysql

fetch

object()

Объект, доступ к элементам которого осуществляется как к свойствам

Основной функцией является функция 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, позволяющий осуществить доступ с по-



1 ... 133 134 135 [ 136 ] 137 138 139 ... 264

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика