Что возвращает mysql query
Перейти к содержимому

Что возвращает mysql query

  • автор:

Что возвращает mysql query

Для получения данных в MySQL применяется команда SELECT . Например, получение всех данных из таблицы Users:

SELECT * FROM Users

Рассмотрим получение данных на примере таблицы Users, созданной в прошлых, которая имеет следующее определение:

CREATE TABLE Users (id INTEGER AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30), age INTEGER)
Объектно-ориентированный стиль

При выполнении команды SELECT метод query() объекта mysqli возвращает набор полученных строк, который мы можем перебрать с помощью цикла. Например, перебор с помощью цикла foreach :

$sql = "SELECT * FROM Users"; if($result = $conn->query($sql)) < foreach($result as $row)< $userid = $row["id"]; $username = $row["name"]; $userage = $row["age"]; >>

Здесь $result представляет набор строк. Каждый его элемент, который передается в переменную $row , хранит данные отдельной строки в виде ассоциативного массива, где ключи элементов — названия столбцов.

Вместо цикла foreach также можно использовать другие виды циклов. Например, применение цикла while :

$sql = "SELECT * FROM Users"; if($result = $conn->query($sql))< while($row = $result->fetch_array()) < $userid = $row["id"]; $username = $row["name"]; $userage = $row["age"]; >>

В данном случае метод $result->fetch_array() выбирает текущую строку из набора в переменную $row и переходит к следующей. Когда строк не останется, метод возвратит false , и произойдет выход из цикда. Полученное значени $row опять же представляет строку в виде ассоциативного массива.

После окончания работы с полученным набором строк мы можем очистить отведенную для него память с помощью метода free() :

$result->free();

Теперь посмотрим на примере. Определим скрипт index.php , которая будет выводить значения из таблицы Users:

   METANIT.COM  

Список пользователей

connect_error)< die("Ошибка: " . $conn->connect_error); > $sql = "SELECT * FROM Users"; if($result = $conn->query($sql))< $rowsCount = $result->num_rows; // количество полученных строк echo "

Получено объектов: $rowsCount

"; echo ""; foreach($result as $row)< echo ""; echo ""; echo ""; echo ""; echo ""; > echo "
IdИмяВозраст
" . $row["id"] . "" . $row["name"] . "" . $row["age"] . "
"; $result->free(); > else< echo "Ошибка: " . $conn->error; > $conn->close(); ?>

Таким образом, при обращении к скрипту index.php браузер отобразит список данных, полученных из БД:

Получение данных из MySQL в PHP с помощью MySQLi

Дополнительно стоит отметить, что с помощью свойства $result->num_rows мы можем получить количество строк, извлеченных из БД.

Процедурный стиль

При процедурном стиле функция mysqli_query() при успешном выполнении команды SELECT возвращает набор строк, который можно перебрать с помощью цикла:

$sql = "SELECT * FROM Users"; if($result = mysqli_query($conn, $sql)) < foreach($result as $row)< $userid = $row["id"]; $username = $row["name"]; $userage = $row["age"]; >>

Как и при объектно-ориентированном подходе, полученные строки представляют ассоциативные массивы, где ключи элементов — названия столбцов.

Пример перебоа с помощью цикла while :

$sql = "SELECT * FROM Users"; if($result = mysqli_query($conn, $sql)) < while($row = mysqli_fetch_array($result))< $userid = $row["id"]; $username = $row["name"]; $userage = $row["age"]; >>

Функция mysqli_fetch_array() выбирает текущую строку из набора в переменную $row и переходит к следующей. Когда строк не останется, метод возвратит false , и произойдет выход из цикла.

После окончания работы с полученным набором строк мы можем очистить отведенную для него память с помощью функции mysqli_free_result() , в которую передается полученный набор строк:

mysqli_free_result($result);
   METANIT.COM  

Список пользователей

$sql = "SELECT * FROM Users"; if($result = mysqli_query($conn, $sql))< $rowsCount = mysqli_num_rows($result); // количество полученных строк echo "

Получено объектов: $rowsCount

"; echo ""; foreach($result as $row)< echo ""; echo ""; echo ""; echo ""; echo ""; > echo "
IdИмяВозраст
" . $row["id"] . "" . $row["name"] . "" . $row["age"] . "
"; mysqli_free_result($result); > else < echo "Ошибка: " . mysqli_error($conn); >mysqli_close($conn); ?>

Почему $mysql->query($query) иногда возвращает массив, а иногда объект

Там написано что возвращается либо объект mysqli_result либо boolean . И посему вопрос — откуда автор вопроса взял массив?

29 авг 2019 в 12:59

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Потому что mysqli_result — это объект с мета-даными и контентом, которые были найдены в при вашем запросе. Чтобы полчить сами записи вы должны обратиться к методу mysqli_fetch_assoc() и передать туда ваш полученный объект $result .

Отслеживать
ответ дан 29 авг 2019 в 19:48
1,218 5 5 серебряных знаков 14 14 бронзовых знаков

  • php
  • mysql
  • mysqli
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.3.1.5619

mysql_query

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

Описание

mixed mysql_query ( string $query [, resource $link_identifier = NULL ] )

mysql_query() посылает один запрос (посылка нескольких запросов не поддерживается) активной базе данных сервера, на который ссылается переданный дескриптор link_identifier .

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

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

Соединение MySQL. Если идентификатор соединения не был указан, используется последнее соединение, открытое mysql_connect() . Если такое соединение не было найдено, функция попытается создать таковое, как если бы mysql_connect() была вызвана без параметров. Если соединение не было найдено и не смогло быть создано, генерируется ошибка уровня E_WARNING .

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

Для запросов SELECT, SHOW, DESCRIBE, EXPLAIN и других запросов, возвращающих результат из нескольких рядов, mysql_query() возвращает дескриптор результата запроса ( resource ), или FALSE в случае ошибки.

Для других типов SQL-запросов, INSERT, UPDATE, DELETE, DROP и других, mysql_query() возвращает TRUE в случае успеха и FALSE в случае ошибки.

Полученный дескриптор результата нужно передать в функцию mysql_fetch_assoc() или любую другую функцию, работающую с результатами запросов.

Используйте mysql_num_rows() для выяснения количества рядов в результате SELECT-запроса или mysql_affected_rows() для выяснения количества обработанных рядов запросами DELETE, INSERT, REPLACE и UPDATE.

mysql_query() также завершится с ошибкой и вернет FALSE , если у пользователя нет доступа к какой-либо из таблиц, фигурирующих в запросе.

Примеры

Пример #1 Неверный запрос

Следующий запрос составлен неправильно и mysql_query() вернёт FALSE .

$result = mysql_query ( ‘SELECT * WHERE 1 = 1’ );
if (! $result ) die( ‘Неверный запрос: ‘ . mysql_error ());
>

Пример #2 Верный запрос

Следующий запрос верен, поэтому mysql_query() вернет resource .

// Эти данные, к примеру, могли быть получены от пользователя
$firstname = ‘fred’ ;
$lastname = ‘fox’ ;

// Формируем запрос
// Это лучший способ выполнить SQL-запрос
// Еще примеры можно найти в документации mysql_real_escape_string()
$query = sprintf ( «SELECT firstname, lastname, address, age FROM friends
WHERE firstname=’%s’ AND lastname=’%s'» ,
mysql_real_escape_string ( $firstname ),
mysql_real_escape_string ( $lastname ));

// Выполняем запрос
$result = mysql_query ( $query );

// Проверяем результат
// Это показывает реальный запрос, посланный к MySQL, а также ошибку. Удобно при отладке.
if (! $result ) $message = ‘Неверный запрос: ‘ . mysql_error () . «\n» ;
$message .= ‘Запрос целиком: ‘ . $query ;
die( $message );
>

// Используем результат
// Попытка напечатать $result не выведет информацию, которая в нем хранится
// Необходимо использовать какую-либо mysql-функцию, работающую с результатом запроса
// См. также mysql_result(), mysql_fetch_array(), mysql_fetch_row() и т.п.
while ( $row = mysql_fetch_assoc ( $result )) echo $row [ ‘firstname’ ];
echo $row [ ‘lastname’ ];
echo $row [ ‘address’ ];
echo $row [ ‘age’ ];
>

// Освобождаем ресурсы, ассоциированные с результатом
// Это делается автоматически в конце скрипта
mysql_free_result ( $result );
?>

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

  • mysql_connect() — Открывает соединение с сервером MySQL
  • mysql_error() — Возвращает текст ошибки последней операции с MySQL
  • mysql_real_escape_string() — Экранирует специальные символы в строках для использования в выражениях SQL
  • mysql_result() — Возвращает данные результата запроса
  • mysql_fetch_assoc() — Возвращает ряд результата запроса в качестве ассоциативного массива
  • mysql_unbuffered_query() — Посылает запрос MySQL без авто-обработки результата и его буферизации

MySQL.Database

Возвращает таблицу таблиц SQL, представлений и хранимых скалярных функций, доступных в базе данных MySQL на сервере server в именованном database экземпляре базы данных. Порт может быть дополнительно указан сервером, разделенным двоеточием. Необязательный параметр options записи может быть указан для управления следующими параметрами:

  • Encoding : значение TextEncoding, указывающее набор символов, используемый для кодирования всех запросов, отправленных серверу (по умолчанию — NULL).
  • CreateNavigationProperties : логический (true/false), который задает, следует ли создавать свойства навигации для возвращаемых значений (по умолчанию — true).
  • NavigationPropertyNameGenerator : функция, используемая для создания имен для свойств навигации.
  • Query : собственный SQL-запрос, используемый для извлечения данных. Если запрос создает несколько результирующих наборов, будет возвращено только первое.
  • CommandTimeout : длительность, которая определяет время выполнения запроса на стороне сервера перед отменой. Значение по умолчанию — десять минут.
  • ConnectionTimeout : длительность, которая определяет время ожидания, прежде чем отказаться от попытки подключения к серверу. Значение по умолчанию зависит от драйвера.
  • TreatTinyAsBoolean : логический (true/false), определяющий, следует ли принудительно принудительно использовать крошечные столбцы на сервере в качестве логических значений. Значение по умолчанию — true.
  • OldGuids : логический (true/false), который задает, будут ли столбцы char(36) (если false) или binary(16) (если значение true) рассматриваться как идентификаторы GUID. По умолчанию используется значение false.
  • ReturnSingleDatabase : логический (true/false), который задает, следует ли возвращать все таблицы всех баз данных (если значение false) или возвращать таблицы и представления указанной базы данных (если значение true). По умолчанию используется значение false.
  • HierarchicalNavigation : логический (true/false), который задает, следует ли просматривать таблицы, сгруппированные по именам схем (по умолчанию — false).

Параметр записи указывается как [option1 = value1, option2 = value2. ] или [Query = «select . «] например.

Обратная связь

Были ли сведения на этой странице полезными?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *