Получение результата запроса php

Получение результата запроса php

За выполнение запросов отвечают функции mysqli::query() , mysqli::real_query() и mysqli::multi_query() . Чаще всего применяется функция mysqli::query() , так как она выполняет сразу две задачи: выполняет запрос и буферизует на клиенте результат этого запроса (если он есть). Вызов mysqli::query() идентичен последовательному вызову функций mysqli::real_query() и mysqli::store_result() .

Пример #1 Выполнение запросов

mysqli_report ( MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT );
$mysqli = new mysqli ( «example.com» , «user» , «password» , «database» );

$mysqli -> query ( «DROP TABLE IF EXISTS test» );
$mysqli -> query ( «CREATE TABLE test(id INT)» );

Буферизация результатов запроса

После выполнения запроса результаты можно либо получить сразу, либо считать строку за строкой с сервера. Буферизация набора результатов на стороне клиента позволяет серверу как можно раньше высвободить ресурсы, связанные с результатами запроса. Проще говоря, клиенты медленно используют наборы результатов. Поэтому рекомендуется использовать буферизованные наборы результатов. mysqli::query() объединяет выполнение запроса и буферизацию набора результатов.

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

Пример #2 Навигация по строкам буферизованной результирующей таблицы

mysqli_report ( MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT );
$mysqli = new mysqli ( «example.com» , «user» , «password» , «database» );

$mysqli -> query ( «DROP TABLE IF EXISTS test» );
$mysqli -> query ( «CREATE TABLE test(id INT)» );
$mysqli -> query ( «INSERT INTO test(id) VALUES (1), (2), (3)» );

$result = $mysqli -> query ( «SELECT id FROM test ORDER BY id ASC» );

echo «Обратный порядок. \n» ;
for ( $row_no = $result -> num_rows — 1 ; $row_no >= 0 ; $row_no —) $result -> data_seek ( $row_no );
$row = $result -> fetch_assoc ();
echo » id color: #007700″>. $row [ ‘id’ ] . «\n» ;
>

echo «Исходный порядок строк. \n» ;
foreach ( $result as $row ) echo » id color: #007700″>. $row [ ‘id’ ] . «\n» ;
>

Результат выполнения данного примера:

Обратный порядок. порядок строк.

Небуферизованные результирующие наборы

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

Пример #3 Навигация по строкам небуферизованной результирующей таблицы

$mysqli -> real_query ( «SELECT id FROM test ORDER BY id ASC» );
$result = $mysqli -> use_result ();

echo «Порядок строк в результирующем наборе. \n» ;
foreach ( $result as $row ) echo » id color: #007700″>. $row [ ‘id’ ] . «\n» ;
>

Типы данных значений в результирующей таблице

Функции mysqli::query() , mysqli::real_query() и mysqli::multi_query() предназначены для выполнения не подготавливаемых запросов. На уровне протокола клиент-серверного взаимодействия MySQL за выполнение запросов отвечают команда COM_QUERY и текстовый протокол. Когда используется текстовый протокол, сервер MySQL перед отправкой клиенту преобразует все данные в результирующем наборе в текстовые строки. Это преобразование выполняется вне зависимости от типа данных SQL-столбца результирующей таблицы. Клиентские библиотеки mysql, в свою очередь, получают все данные, принимая их за строки. На клиенте не проводится никакого обратного преобразования к исходным типам, все данные, полученные приложением остаются PHP строками.

Читайте также:  Python xml dom minidom примеры

Пример #4 Текстовый протокол по умолчанию возвращает строки

mysqli_report ( MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT );
$mysqli = new mysqli ( «example.com» , «user» , «password» , «database» );

$mysqli -> query ( «DROP TABLE IF EXISTS test» );
$mysqli -> query ( «CREATE TABLE test(id INT, label CHAR(1))» );
$mysqli -> query ( «INSERT INTO test(id, label) VALUES (1, ‘a’)» );

$result = $mysqli -> query ( «SELECT id, label FROM test WHERE > );
$row = $result -> fetch_assoc ();

printf ( «id = %s (%s)\n» , $row [ ‘id’ ], gettype ( $row [ ‘id’ ]));
printf ( «label = %s (%s)\n» , $row [ ‘label’ ], gettype ( $row [ ‘label’ ]));

Результат выполнения данного примера:

id = 1 (string) label = a (string)

Если используется библиотека mysqlnd, можно включить преобразование целочисленных значений и чисел с плавающей точкой из столбцов таблицы в PHP числа. Делается это заданием настройки подключения MYSQLI_OPT_INT_AND_FLOAT_NATIVE . В таком случае mysqlnd будет проверять метаданные столбцов и преобразовывать SQL-числа этих полей в PHP-числа, если эти значения не выходят за рамки допустимых диапазонов типов данных PHP. То есть, например, SQL INT число попадёт в PHP приложение в виде целого (integer).

Пример #5 Получение исходных типов данных в приложении

mysqli_report ( MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT );

$mysqli = new mysqli ();
$mysqli -> options ( MYSQLI_OPT_INT_AND_FLOAT_NATIVE , 1 );
$mysqli -> real_connect ( «example.com» , «user» , «password» , «database» );

$mysqli -> query ( «DROP TABLE IF EXISTS test» );
$mysqli -> query ( «CREATE TABLE test(id INT, label CHAR(1))» );
$mysqli -> query ( «INSERT INTO test(id, label) VALUES (1, ‘a’)» );

$result = $mysqli -> query ( «SELECT id, label FROM test WHERE > );
$row = $result -> fetch_assoc ();

printf ( «id = %s (%s)\n» , $row [ ‘id’ ], gettype ( $row [ ‘id’ ]));
printf ( «label = %s (%s)\n» , $row [ ‘label’ ], gettype ( $row [ ‘label’ ]));

Результат выполнения данного примера:

id = 1 (integer) label = a (string)

Источник

Обработка результатов запросов

Выполнение запросов, обработка результатов и получение данных

Описываем нужный SQL-запрос и помещаем его в переменной $sql .

Затем выполняем запрос к базе данных с помощью метода query объекта mysqli.

Если ошибок нет — получим объект mysqli_result , который сохраняется в переменной $result .

Читайте также:  Css selectors all children

Если же в SQL-запросе присутствуют ошибки — метод query вернет FALSE ,

тогда с помощью оператора throw генерируем исключение, которое обрабатываем с помощью Exception .

// устанавливаем соединение с базой данных newDB (создаем экземпляр класса new mysqli())
$conn = new mysqli($servername, $username, $password, $dbname);

// SQL-запрос
$sql = «SELECT * FROM users «;

// запрос к базе данных
$result = $conn->query($sql);

if ($result === FALSE) <
throw new \Exception(‘Ошибка в SQL-запросе!’);
>else <
echo «Выполнено:

«;
>

Получение данных одной строки в виде ассоциативного массива:

Получение данных одной строки в виде индексированного массива:

Получение данных одной строки в виде объекта:

$entries = array();
while ($entry = $result->fetch_object()) <
$entries[] = $entry;
>

Получение всех строк в виде ассоциативного массива:

Если результат не содержит количество результатов выборки — num_rows , выведем: «Нет результатов».

Выражение $result->$num_rows — получает число рядов в результирующей выборке

if (!$result->num_rows) <
echo «Нет результатов:

«;
>

Описываем нужный SQL-запрос и помещаем его в переменной $sql .

Затем выполняем запрос к базе данных с помощью функции mysqli_query($conn, $sql) и помещаем результат в переменную $result

// устанавливаем соединение с базой данных newDB
$conn = mysqli_connect($servername, $username, $password, $dbname);

// SQL-запрос
$sql = «SELECT * FROM users»;

// запрос к базе данных
$result = mysqli_query($conn, $sql);

Эта функция возвращает одну запись выборки в виде индексированного массива:

Эта функция возвращает одну запись выборки в виде ассоциативного массива:

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

либо ассоциативный массив, либо массив, содержащий и индексы и строковые ключи:

$row = mysqli_fetch_array($result, MYSQLI_ASSOC);

Получение всего результата .

Эта функция возвращает двухмерный массив, содержащий все записи:

$row = mysqli_fetch_all($result, MYSQLI_ASSOC);

Если запрос к базе данных — выполнен, тогда выведем сообщение «Выполнено».

В противном случае выведем сообщение «Ошибка» и выведем информацию об ошибке mysqli_error($conn) :

if(mysqli_query($conn, $sql)) <
echo «Выполнено»;
>else <
echo «Ошибка:

» . mysqli_error($conn);
>

Выбираем данные из таблицы workers (Стиль ООП).

$servername = «localhost» ;
$username = «root» ;
$password = «» ;
$dbname = «newDB» ;

// Устанавливаем соединение с сервером MySQL:
$conn = new mysqli ( $servername , $username , $password , $dbname );

// Проверка соединения:
if ( $conn -> connect_error ) die ( «Не удалось подключиться: » . $conn -> connect_error );
>
echo «Соединение успешно установлено» ;

//1. Выбрать значения всех полей из таблицы workers:
// $sql = «SELECT * FROM workers «;

//2. Выбрать значения всех полей из таблицы workers, где >
// $sql = «SELECT * FROM workers WHERE >

//3. Выбрать значение поля id из таблицы workers, где значение поля name = ‘Иван’:
// $sql = «SELECT id FROM workers WHERE name = ‘Иван'»;

//4. Выбрать значение поля name из таблицы workers, где id > 5:
// $sql ;

//5. Выбрать значения всех полей из таблицы workers,
// где значение поля name = ‘Сидор’ И значение поля age > 30:
// $sql ;

Читайте также:  Javascript get first element object

//6. Иногда нужно указать много значений:
$sql = «SELECT name FROM workers WHERE AND AND >;

// Выполнение запроса
$result = $conn -> query ( $sql );

// Проверка выполнения запросов
if ( $result === FALSE ) throw new \ Exception ( ‘Ошибка в SQL-запросе!’ );
> else <
echo «Выполнено:

» ;
>

// получить все строки в виде ассоциативного массива
$entries = $result -> fetch_all ( MYSQLI_ASSOC );

// num_rows содержит количество результатов выборки
if (! $result -> num_rows ) echo «Нет результатов:

» ;
>

// закрываем соединение
$conn -> close ();
?>

Источник

mysql_result

Данное расширение устарело, начиная с версии PHP 5.5.0, и будет удалено в будущем. Используйте вместо него MySQLi или PDO_MySQL. Смотрите также инструкцию MySQL: выбор API и соответствующий FAQ для получения более подробной информации. Альтернативы для данной функции:

Описание

Возвращает содержимое одного поля из набора результата MySQL.

Работая с большими результатами запросов, следует использовать одну из функций, обрабатывающих сразу целый ряд результата (указаны ниже). Так как эти функции возвращают значение нескольких ячеек сразу, они НАМНОГО быстрее mysql_result() . Кроме того, учтите, что указание численного смещения работает намного быстрее, чем указание колонки, или колонки с таблицей через точку.

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

Обрабатываемый результат запроса. Этот результат может быть получен с помощью функции mysql_query() .

Номер получаемого ряда из результата. Нумерация рядов начинается с 0.

Имя или смещение получаемого поля.

Может быть как смещением поля, именем поля, так и именем поля вместе с таблицей (таблица.поле). Если для поля был указан псевдоним (‘select foo as bar from. ‘), используйте его вместо имени самого поля. Если не указан, возвращается первое поле.

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

Содержимое одного поля из набора результата MySQL в случае успеха, или FALSE в случае ошибки.

Примеры

Пример #1 Пример использования mysql_result()

$link = mysql_connect ( ‘localhost’ , ‘mysql_user’ , ‘mysql_password’ );
if (! $link ) die( ‘Ошибка соединения: ‘ . mysql_error ());
>
if (! mysql_select_db ( ‘database_name’ )) die( ‘Ошибка выбора базы данных: ‘ . mysql_error ());
>
$result = mysql_query ( ‘SELECT name FROM work.employee’ );
if (! $result ) die( ‘Ошибка выполнения запроса:’ . mysql_error ());
>
echo mysql_result ( $result , 2 ); // выведет имя третьего сотрудника

Примечания

Замечание:

Вызовы функции mysql_result() не должны смешиваться с другими функциями, работающими с результатом запроса.

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

  • mysql_fetch_row() — Обрабатывает ряд результата запроса и возвращает массив с числовыми индексами
  • mysql_fetch_array() — Обрабатывает ряд результата запроса, возвращая ассоциативный массив, численный массив или оба
  • mysql_fetch_assoc() — Возвращает ряд результата запроса в качестве ассоциативного массива
  • mysql_fetch_object() — Обрабатывает ряд результата запроса и возвращает объект

Источник

Оцените статью