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

PDO::query Ejecuta una sentencia SQL, devolviendo un conjunto de resultados como un objeto PDOStatement


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

PDO::query() ejecuta una sentencia SQL en una única llamada a función, devolviendo el conjunto de resultados (si los hay) que devuelve la sentencia como un objeto PDOStatement.

Para una consulta que se necesite ejecutar en múltiples ocasiones, se obtendrá una mejor rendimiento si se prepara un objeto PDOStatement usando PDO::prepare() y ejecutando la sentencia con múltiple llamadas a PDOStatement::execute().

Si no se buscan todos los datos del conjunto de resultados antes de ejecutar la siguiente llamada a PDO::query(), ésta puede fallar. Llamando a PDOStatement::closeCursor() se liberan los recursos de la base de datos asociados al objeto PDOStatement antes de ejecutar la siguiente llamada a PDO::query().


Aunque esta función está documentada solamente teniendo un único parámetro, se pueden pasar argumentos adicionales a esta función. Éstos serán tratados como si se llamase a PDOStatement::setFetchMode() con el objeto de la sentencia resultante.



La sentencia SQL a preparar y ejecutar.

Los datos dentro de la consulta deben ser debidamente escapados.

Valores devueltos

PDO::query() devuelve un objeto PDOStatement, o false en caso de error.


Ejemplo #1 Demostración de PDO::query

Una buena característica de PDO::query() es que permite iterar sobre el conjunto de filas devueltos por una ejecución de una sentencia SELECT con éxito.

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

El resultado del ejemplo sería:

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

Ver también

add a note add a note

User Contributed Notes 6 notes

fredrik at NOSPAM dot rambris dot com
15 years ago
The handling of errors by this function is controlled by the attribute PDO::ATTR_ERRMODE.

Use the following to make it throw an exception:
Ilyas Bakirov
1 year ago
I would like to mention fetching rows from SQL query using PDO:


= 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");

dozoyousan at gmail dot com
16 years ago
> 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 );
marcos at marcosregis dot com
14 years ago
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:
// 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


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

// or

// now we are ready to query DataLinks

To use DataLinks on oci just use OCI_DEFAULT on oci_execute() function;
stefano[dot]bertoli [at] gmail[dot]com
8 years ago
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:

= $stmt->setFetchMode(PDO::FETCH_NUM);

= $db->query('SELECT * FROM `mytable` WHERE true', PDO::FETCH_ASSOC);

3 years ago
The Documentation doesn’t mention this, but you can use a fetch style as a second parameter. For example:

$data as $row) {
//    etc
To Top