|
Программирование >> Программный интерфейс приложений
Окончание табл Е. 7 Функция mysql s tore resul t () Функция mysl use resul t() Функция mysql af fected rows () ляется аналогом функции mysql num rows() Случайный доступ к результирующему набору возможен с помощью функций mysql data seek(), mysql row seek О иmysql row tell{) Функцию mysql f etch row {) не нужно вызывать вовсе, поскольку все строки уже и так извлекаются для клиента Доступ к таблицам блокируется только на период времени, необходимый для выборки строк данных Элемент max length () структур MYSQL FIELD результирующего набора устанавливается равным длине наибольшего значения для столбца набора Функцию mysql aff ected rows {) нельзя использовать Случайный доступ к результирующему набору невозможен. Строки могут обрабатываться только в порядке, возвращаемом с сервера. Функции mysql data seek(), mysql row seek О и mysql row tell () не используются Для выборки строки обязательно нужно вызывать функцию mysql fetch row (),иначе очень длинные строки перейдут на результаты следующего запроса, вызвав ошибку рассинхронизации Таблицы могут оставаться заблокированными, если клиент временно приостановит выборку Это не позволит другим кпиентам получить доступ к этим таблицам Значение элемента max length () не имеет никакого смысла, поскольку оно неизвестно до момента завершения полной выборки строк int mysql affected rows (mysql *conn) Возвращает число строк, измененных последним запросом delete, insert, replace или update. Эту функцию для подобных запросов можно вызывать сразу после успешного вызова функции mysql query (). Можно также Вызвать функцию mysql af fected rows () после вьшолнения оператора, возвращающего строки. В этом случае эта функция работает так же, как и функция mysql num rows () и подвержена таким же ограничениям. Кроме того, существует еще одно ограничение и заключается оно в том, что возвращенное функцией mysql af fected rows () значение не будет иметь смысла, если для выборки результата использовалась функция mysql use result(). Функция mysql aff ected rows () возвращает ноль, если ни один запрос не был отправлен, либо был выполнен запрос, возвращающий строки, но ни одна из них выбрана не была. Если возвращен- ное значение больше нуля, оно отражает число измененных (дл запросов DELETE, INSERT, REPLACE и UPDATE) или ВОЗВрашенНЫХ (для запросов, возвращающих данные) строк. Возвращенное значение -1 указывает на наличие ошибки или запуск функции mysqlaf f ected rows () после выполнения запроса, возвращающего строки, но до реальной выборки результирующего набора. Поскольку возвращаемое этой функцией значение не имеет знака, его сравнение можно выполнить посредством преобразования результата в значение со знаком: if ((long) mysql affected rows (conn) == -1) fprint (strderr, ErrorlVn ); Если пользователь определяет, что программа должна возвратит! число строк, отвечающих условиям запроса UPDATE, функци; mysql af f ected rows () возвращает именно это значение, а т число реально измененных строк. (MySQL не обновляет строку если изменяемые столбцы включают значения, аналогичные но вым.) Для выбора этого варианта необходимо либо определить опцию return f ound rows в конфигурационном файле, либо задать в параметре flags функции mysql real connect () опцик С LIENT FOUN D ROW S. Более детальную информацию о выводе значений типр my ulonglong можно найти в разделе Скалярные типы данных . void mysql data seek (MYSQL RES *res set, unsigned in offset) ; Находит нужную строку в результирующем наборе. Значение аргумента offset может задаваться в диапазоне от О до mysql num rows (resset) -1. Если это значение выходит за пределы данного диапазона, возвращаемый результат окажется непредсказуемым. Для работы функции mysql data seek () необходимо, чтобы результирующий набор бьш выбран полностью. Поэтому данную функцию можно использовать только в том случае, если результирующий набор создан функцией mysql store result (), но не функцией mysql use result О . MYSQL FIELD * mYsql fetch field (MYSQL RES *res set); Возвращает структуру с информацией (метаданными) о столбце результирующего набора. При первом вызове функции mysql fetchfieldO после успешного выполнения запроса, возвращающего строки, возвращается информация о первом столбце. При каждом последующем вызове возвращается информация о последующих столбцах или значение NULL, если больше столбцов не осталось. Для определения позиции текущего столбца можно вызвать функцию mysql field tell О. Чтобы выбрать отдельный столбец, информация о котором будет возвращена при следующем вызове функции mysql fetch field(), воспользуйтесь функцией mysql field seek(). В следующем примере отыскивается первая структура mysql field, а затем извлекаются все последующие структуры с информацией о столбцах: MYSQL FIELD * field; unsigned int i; mysql field seek (res set, 0); for (i = 0; 1 < mysql num fields (res set); i++) { field = mysql fetch field (rBS set) printf ( column %u: name = %s max length = %lu\n , 1, field->name, field->max length); MYSQL FIELD * mysql fetch fields (MYSQL RES res set); Возвращает массив всех структур с информацией о столбцах результирующего набора. Доступ к ним можно получить следующим образом: MYSQL FIELD * field; unsigned int i; field = mysql fetch fields (res set); for (1 = 0; 1 < mysql num .fields {res set) ; i++) ; printf ( column %u: name = %s max length = %lu\n , i, field[ij.name, fieldti].max length); Сравните этот код с примером, приведенным в описании функции mysql f etchf ield (). Обратите внимание на то, что хотя обе функции возвращают значения одинакового типа, доступ к таким значениям осуществляется с помощью разного синтаксиса. MYSQL FIELD * mysql fetch field direct (MYSQL RES *res set, unsigned int field num); Считывая индекс столбца, возвращает для него информационную структуру. Значение аргумента f ieldnum может задаваться в диапазоне от О до mysql num f ields ()-1. Если это значение выходит за пределы данного диапазона, возвращаемый результат окажется непредсказуемым. Как получать прямой доступ к структурам MYSQL field, показано в следующем примере: MYSQL FIELD * field; unsigned int i; for (i = 0; i < mysql num fields (res set); i++) { field = mysql fetch field direct (res set, i);
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |