PDO::query

(PHP 5 >= 5.1.0, PECL pdo >= 0.2.0)

PDO::query Выполняет SQL запрос и возвращает результирующий набор в виде объекта PDOStatement

Описание

PDOStatement PDO::query ( string $statement )
PDOStatement PDO::query ( string $statement , int $PDO::FETCH_COLUMN , int $colno )
PDOStatement PDO::query ( string $statement , int $PDO::FETCH_CLASS , string $classname , array $ctorargs )
PDOStatement PDO::query ( string $statement , int $PDO::FETCH_INTO , object $object )

PDO::query() выполняет SQL запрос без подготовки и возвращает результирующий набор (если есть) в виде объекта PDOStatement.

Если запрос будет запускаться многократно, для улучшения производительности приложения имеет смысл этот запрос один раз подготовить методом PDO::prepare(), а затем запускать на выполнение методом PDOStatement::execute() столько раз, сколько потребуется.

Если после выполнения предыдущего запроса вы не выбрали все данные из результирующего набора, следующий вызов PDO::query() может потерпеть неудачу. В таких случаях следует вызываеть метод PDOStatement::closeCursor(), который освободит ресурсы базы данных занятые предыдущим объектом PDOStatement. После этого можно безопасно вызывать PDO::query().

Замечание:

Несмотря на то, что функция документирована, как принимающая один аргумент, вы можете передать дополнительные аргументы. Они будут обработаны, как если бы вы вызвали PDOStatement::setFetchMode() применительно к возвращаемому объекту.

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

statement

Текст SQL запроса для подготовки и выполнения.

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

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

PDO::query() возвращает объект PDOStatement или FALSE, если запрос выполнить не удалось.

Примеры

Пример #1 Демонстрация работы PDO::query

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

<?php
function getFruit($conn) {
    
$sql 'SELECT name, color, calories FROM fruit ORDER BY name';
    foreach (
$conn->query($sql) as $row) {
        print 
$row['name'] . "\t";
        print 
$row['color'] . "\t";
        print 
$row['calories'] . "\n";
    }
}
?>

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

apple   red     150
banana  yellow  250
kiwi    brown   75
lemon   yellow  25
orange  orange  300
pear    green   150
watermelon      pink    90

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

  • PDO::exec() - Запускает SQL запрос на выполнение и возвращает количество строк, задействованых в ходе его выполнения
  • PDO::prepare() - Подготавливает запрос к выполнению и возвращает ассоциированный с этим запросом объект
  • PDOStatement::execute() - Запускает подготовленный запрос на выполнение

Коментарии

> When query() fails, the boolean false is returned. 

I think that is "Silent Mode".
If that set attribute ErrorMode "Exception Mode"
then that throw PDOException.
 $pdoObj = new PDO( $dsn, $user, $pass );
 $pdoObj->setAttribute("PDO::ATTR_ERRMODE", PDO::ERRMODE_EXCEPTION);
2006-05-03 01:26:29
http://php5.kiev.ua/manual/ru/pdo.query.html
The handling of errors by this function is controlled by the attribute PDO::ATTR_ERRMODE.

Use the following to make it throw an exception:
<?php
$dbh
->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
?>
2007-05-05 12:04:15
http://php5.kiev.ua/manual/ru/pdo.query.html
After a lot of hours working with DataLink on Oracle->MySQL and PDO we (me and Adriano Rodrigues, that solve it) discover that PDO (and oci too) need the attribute AUTOCOMMIT set to FALSE to work correctly with.
There's  3 ways to set autocommit to false: On constructor, setting the atribute after construct and before query data or initiating a Transaction (that turns off autocommit mode)

The examples:
<?php
// First way - On PDO Constructor
$options = array(PDO::ATTR_AUTOCOMMIT=>FALSE);

$pdo = new PDO($dsn,$user,$pass,$options);

// now we are ready to query DataLinks

?>

<?php 
// Second Way - Before create statements
$pdo = new PDO($dsn,$user,$pass);

$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,FALSE);
// or
$pdo->beginTransaction();

// now we are ready to query DataLinks
?>

To use DataLinks on oci just use OCI_DEFAULT on oci_execute() function;
2008-09-24 12:14:18
http://php5.kiev.ua/manual/ru/pdo.query.html
Trying to pass like second argument PDO::FETCH_ASSOC it still work.

So passing FETCH TYPE like argument seems work.

This save you from something like:

<?php
$result 
$stmt->setFetchMode(PDO::FETCH_NUM);
?>

Example:
<?php
$res 
$db->query('SELECT * FROM `mytable` WHERE true'PDO::FETCH_ASSOC);

?>
2014-09-08 17:14:51
http://php5.kiev.ua/manual/ru/pdo.query.html
Автор:
I would like to mention fetching rows from SQL query using PDO:

<?php

$dbh 
= new PDO('mysql:host=localhost;dbname=test'$user$pass);

// use the connection here
$sth $dbh->query('SELECT * FROM countries');

// fetch all rows into array, by default PDO::FETCH_BOTH is used
$rows $stm->fetchAll();

// iterate over array by index and by name
foreach($rows as $row) {

   
printf("$row[0] $row[1] $row[2]\n");
   
printf("$row['id'] $row['name'] $row['population']\n");

}
?>
2021-03-31 09:22:22
http://php5.kiev.ua/manual/ru/pdo.query.html
Автор:
When you make a wraper for PDO:query, you must define the method like this:

public function query( string $sql,  ?int $fetchMode = null, mixed ...$fetchModeArgs) : \PDOStatement|false
   
if you delete one of the parameters or use one of the oficials parameters you get a Fatal error
2023-10-23 13:00:33
http://php5.kiev.ua/manual/ru/pdo.query.html

    Поддержать сайт на родительском проекте КГБ