dbx_query

(PHP 4 >= 4.0.6, PHP 5 < 5.1.0, PECL dbx >= 1.1.0)

dbx_queryПосылает запрос и извлекает возвращенные строки (если есть)

Описание

dbx_query ( object $link_identifier , string $sql_statement , int $flags = ? ) : mixed

Посылает запрос и извлекает возвращенные строки.

Список параметров

link_identifier

Ссылка на соединение, открытое с помощью dbx_connect()

sql_statement

SQL запрос.

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

flags

Параметр flags используется для контроля количества возвращаемой информации. Можно использовать любую комбинацию из нижеперечисленных констант, объединенных побитовым ИЛИ (|). Флаги DBX_COLNAMES_* переопределяют настройку dbx.colnames_case в php.ini.

DBX_RESULT_INDEX
Всегда установлена. Возвращенный объект содержит двумерный индексированный массив data. К примеру, в выражении data[2][3], 2 означает номер строки, а 3 номер столбца. Отсчет начинается с индекса [0][0]. Если задана константа DBX_RESULT_ASSOC, возвращенный объект будет также содержать информацию, относящуюся к DBX_RESULT_INFO, даже если она не будет задана.
DBX_RESULT_INFO
Предоставляет информацию о столбцах. Их имена и типы.
DBX_RESULT_ASSOC
Позволяет получать доступ к столбцам data по имени. Элементы ассоциативного массива являются ссылками на соответствующие элементы индексированного. Так что изменяя data[0][0] вы измените и data[0]['field_name_for_first_column'].
DBX_RESULT_UNBUFFERED
Этот флаг указывает не создавать свойство data. Соответственно, свойство rows изначально будет равно 0. Используйте этот флаг для больших выборок. Для доступа к строкам используйте функцию dbx_fetch_row(). Функция dbx_fetch_row() возвращает строки учитывая все остальные, выставленные для запроса, флаги. Также, каждый успешный вызов этой функции, увеличивает rows на единицу.
DBX_COLNAMES_UNCHANGED
Имена столбцов возвращаются неизменными.
DBX_COLNAMES_UPPERCASE
Имена столбцов преобразуются к верхнему регистру.
DBX_COLNAMES_LOWERCASE
Имена столбцов преобразуются к нижнему регистру.
Обратите внимание, что DBX_RESULT_INDEX используется всегда, независимо от выставленного параметра flags. Это значит, что только следующие комбинации имеют смысл:
  • DBX_RESULT_INDEX
  • DBX_RESULT_INDEX | DBX_RESULT_INFO
  • DBX_RESULT_INDEX | DBX_RESULT_INFO | DBX_RESULT_ASSOC - по умолчанию, если flags не задан.

Возвращаемые значения

dbx_query() возвращает либо объект, либо 1 в случае успешного выполнения и 0 в случае ошибки. Объект возвращается только если sql_statement является запросом, возвращающим результирующий набор (т.е. запрос типа SELECT, если он не возвращает пустой набор).

Возвращенный объект содержит четыре, либо пять свойств, в зависимости от параметра flags:

handle

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

<?php
$result 
dbx_query($link"SELECT id FROM table");
mysql_field_len($result->handle0);
?>

cols и rows

Количество столбцов и строк в результирующем наборе соответственно.

<?php
$result 
dbx_query($link'SELECT id FROM table');
echo 
$result->rows// количество строк
echo $result->cols// количество столбцов
?>

info (опциональный)
Заполняется значениями только если константы DBX_RESULT_INFO или DBX_RESULT_ASSOC переданы в параметр flags. Представляет из себя двумерный массив, имеющий две строки (name и type), содержащие информацию о столбцах.

Пример #1 Вывод всех имен и типов столбцов

<?php
$result 
dbx_query($link'SELECT id FROM table',
                     
DBX_RESULT_INDEX DBX_RESULT_INFO);

for (
$i 0$i $result->cols$i++ ) {
    echo 
$result->info['name'][$i] . "\n";
    echo 
$result->info['type'][$i] . "\n";  
}
?>
data
Это свойство содержит актуальный результирующий набор, возможно, ассоциированный с именами столбцов в зависимости от значения flags. Если задана DBX_RESULT_ASSOC, можно обращаться к столбцам по имени - $result->data[2]["field_name"].

Пример #2 Вывод содержимого свойства data в таблицу HTML

<?php
$result 
dbx_query($link'SELECT id, parentid, description FROM table');

echo 
"<table>\n";
foreach (
$result->data as $row) {
    echo 
"<tr>\n";
    foreach (
$row as $field) {
        echo 
"<td>$field</td>";
    }
    echo 
"</tr>\n";
}
echo 
"</table>\n";
?>

Пример #3 Как обрабатывать UNBUFFERED запросы

<?php

$result 
dbx_query ($link'SELECT id, parentid, description FROM table'DBX_RESULT_UNBUFFERED);

echo 
"<table>\n";
while (
$row dbx_fetch_row($result)) {
    echo 
"<tr>\n";
    foreach (
$row as $field) {
        echo 
"<td>$field</td>";
    }
    echo 
"</tr>\n";
}
echo 
"</table>\n";

?>

Примеры

Пример #4 Как обрабатывать возвращенное значение

<?php
$link   
dbx_connect(DBX_ODBC"""db""username""password")
    or die(
"Не получилось подключиться");

$result dbx_query($link'SELECT id, parentid, description FROM table');

if (
is_object($result) ) {
    
// ... сделайте кое-что здесь, смотрите подробные примеры ниже ...
    // во-первых, выведите имена и типы полей
    // затем нарисуйте таблицу, заполненную возвращенными значениями полей
} else {
    exit(
"Запрос не выполнен");
}

dbx_close($link);
?>

Примечания

Замечание:

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

Имена столбцов Oracle возвращаются в нижнем регистре.

Смотрите также

  • dbx_escape_string() - Экранирует строку таким образом, что ее можно безопасно использовать для запроса
  • dbx_fetch_row() - Извлекает строки из результата запроса, для которого был задан флаг DBX_RESULT_UNBUFFERED
  • dbx_connect() - Открывает соединение/базу данных