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

1 ... 105 106 107 [ 108 ] 109 110 111 ... 264


Обработка запросов, не возвращающих результирующего набора данных

Операторы типа DELETE, INSERT, REPLACE И UPDATE, Не возвращающие строк, по сравнению с операторами класса SELECT, DESCRIBE, EXPLAIN и SHOW, возвращающими строки, относительно просто обрабатывать. Для обработки операторов, не принадлежащих классу SELECT, их следует передать методу do О с использованием дескриптора. Метод do () подготавливает и выполняет запрос за один прием. Например, для того, чтобы завести запись для нового члена по имени Marcia Brown с датой истечения срока членства 3 июня 2002, необходимо сделать следующее;

$rows = $dbh->do ( INSERT member (last name, first name, expiration)

VALUES( Brown, Marcia ,2002-6-3) );

Метод do () возвращает количество обработанных строк или undef в случае возникновения ошибочной ситуации. Ощибка может произойти по нескольким причинам. (Например, запрос сам может содержать ощибку или у вас нет разрешения на доступ к таблице.) В случае возврата значения, отличного от undef, обратите внимание на случай, когда нет обработанных строк. Когда такое происходит, метод do О возвращает не значение О, а строку GEO (форма записи 0, характерная для языка написания сценариев Perl). Значение GEO в цифровом контексте равно G, а в условных операциях дает значение истина , которая может быть отлична от значения undef. Если бы метод do () возвращал О, бьшо бы значительно сложнее сделать различие между ошибочной ситуацией (undef) и ситуацией строки не обработаны . Сделать проверку на ощибку можно с помощью одного из тестов:

if (Idefined ($rows)) { # error } if (!$ rows) { # error }

В цифровом контексте GEO оценивается как G. Нижеследующий профаммный код правильно печатает число строк, дающих значение переменной $rows, отличное от undef:

if (!$rows) {

print ошибка\п ;

else {

Srows += 0; # преобразовать в число, если значение равно ОЕО print Обработано $rows строк\п ;

Вывести значение $rows также можно с помощью формата %d оператора printf () для преобразования в числовой формат:

if (!$rows) {

print ошибка \n ;



else {

printf %cl строк обработано \n , $rows;

Метод do() аналогичен последовательности методов prepare!) и execute () Предшествующий оператор INSERT можно запрограммировать, не вызывая метода do ():

$sth = $clbh->prepare ( INSERT member (last name,first name,expiration)

VALUES(Brown,Marcia,2002-6-3) ); $rows = $sth->execute () ;

Обработка запросов, возвращающих результирующий набор данных

в этом разделе излагается информация о возможностях вьшолнения циклов выборки строк запросов типа SELECT (или других SELECT-подобных запросов, возвращающих строки, такие как DESCRIBE, EXPLAIN и SHOW) Кроме того, затрагивается тема определения количества результирующих строк, обработки результирующих наборов строк, для которых цикл не нужен. Вы также узнаете, как произвести единовременную выборку.

Как писать циклы выборки строк

Сценарий dumpmembers производит выборку данных с помощью стандартной последовательности методов интерфейса DBI: метода prepare О , осуществляющего предварительную обработку запроса драйвером, и метода execute (), запускающего собственно выполнение запроса, метода f etchrow array (), собственно для выборки строк результирующего запроса, и метода finish (), необходимого для освобождения всех ресурсов, задействованных при выполнении запроса.

Методы prepare О , execute () nfinishO являются достаточно традиционными частями процедуры обработки запросов, которые возвращают строки Однако для операции выборки строк метод fetchrowarray () действительно является единственно возможным методом ( табл. 7.3)

Таблица 7.3. Методы выборки строк для интерфейса DBI

Название метода Возвращаемое значение

fetchrow

array()

Массив CO значениями строк

fetchrow

arrayref()

Ссылка на массив со значениями строк

fetch 0

Аналогично методу f etchrow arrayref ()

f etchrow

hashref0

Ссылка на хэш со значениями строк с ключевыми столбцами

Часть II. Программные интерфейсы СУБД MySQL



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

Метод f etchrow array () работает следующим образом:

while {Йагу = $sth->fetchrow array ()) {77

$deliin = ;

for ($1 = 0; $1 < Йагу; $i++) {

print $deliin . $ary[$i]; $delim = , ;

print \n ;

Каждый вызов метода f etchrowarray () возвращает массив, содержащий значения строк, или пустой массив, когда строк больще нет

Существует альтернативный метод выборки значений столбцов не в массивы, а в скалярные переменные. Такая необходимость может возникнуть при желании работать с переменными, имена которых будут понятнее, чем $агу[0], $агу[1] и т.д. Предположим, что надо произвести выборку имени и адреса электронной почты. С помощью метода f etchrowarray () производится выборка строк набора данных:

Ssth = $dbh->prepare ( SELECT last narae, first narae, suffix, email

FROM member ORDER BY last narae ); $sth->execute ();

while {($last narae, $first name, $suffix, $eraail) = $sth->fetchrow array ())

# произвести определенные действия над переменными

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

Метод fetchrow arrayref () аналогичен методу f etchrow array (). Но вместо возвращения массива, содержащего значения столбцов текущих строк, он возвращает ссылку на массив или значение undef, когда строк больще не осталось. Этот метод можно запустить следующим образом:



1 ... 105 106 107 [ 108 ] 109 110 111 ... 264

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