CakeFest 2024: The Official CakePHP Conference

PDO::query

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

PDO::query Prepara e executa uma instrução SQL sem espaços reservados

Descrição

public PDO::query(string $query, ?int $fetchMode = null): PDOStatement|false
public PDO::query(string $query, ?int $fetchMode = PDO::FETCH_COLUMN, int $colno): PDOStatement|false
public PDO::query(
    string $query,
    ?int $fetchMode = PDO::FETCH_CLASS,
    string $classname,
    array $constructorArgs
): PDOStatement|false
public PDO::query(string $query, ?int $fetchMode = PDO::FETCH_INTO, object $object): PDOStatement|false

PDO::query() prepara e executa uma instrução SQL em uma única chamada de função, retornando a instrução como um objeto PDOStatement.

Para uma consulta que precisa ser emitida diversas vezes, obtém-se melhor desempenho se for preparado um objeto PDOStatement usando PDO::prepare() e emitida a instrução com múltiplas chamadas a PDOStatement::execute().

Se não forem buscados todos os dados em um conjunto de resultados antes de emitir a próxima chamada a PDO::query(), a chamada poderá falhar. Deve-se chamar PDOStatement::closeCursor() para liberar os recursos do banco de dados associados ao objeto PDOStatement antes de se emitir a próxima chamada a PDO::query().

Nota:

Se a query contiver espaços reservados, a instrução deverá ser preparada e executada separadamente usando os métodos PDO::prepare() e PDOStatement::execute().

Parâmetros

query

A instrução SQL a ser preparada e executada.

Se o SQL contiver espaços reservados, PDO::prepare() e PDOStatement::execute() deverão ser usados. Alternativamente, o SQL pode ser preparado manualmente antes de chamar PDO::query(), com os dados formatados corretamente usando PDO::quote() se o driver suportar.

fetchMode

O modo de busca padrão para o PDOStatement retornado. Deve ser uma das constantes PDO::FETCH_*.

Se este argumento for passado para a função, os argumentos restantes serão tratados como se PDOStatement::setFetchMode() tivesse sido chamado no objeto de instrução resultante. Os argumentos subsequentes variam dependendo do modo de busca selecionado.

Valor Retornado

Retorna um objeto PDOStatement ou false em caso de falha.

Erros/Exceções

Emite um erro de nível E_WARNING se o atributo PDO::ATTR_ERRMODE estiver definido como PDO::ERRMODE_WARNING.

Lança uma exceção PDOException se o atributo PDO::ATTR_ERRMODE estiver definido como PDO::ERRMODE_EXCEPTION.

Exemplos

Exemplo #1 SQL sem espaços reservados pode ser executado usando PDO::query()

<?php
$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";
}
?>

O exemplo acima produzirá:

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

Veja Também

add a note

User Contributed Notes 6 notes

up
42
fredrik at NOSPAM dot rambris dot com
16 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:
<?php
$dbh
->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
?>
up
2
Ilyas Bakirov
2 years ago
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");

}
?>
up
3
stefano[dot]bertoli [at] gmail[dot]com
9 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:

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

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

?>
up
1
JJimenez
5 months ago
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
up
1
dozoyousan at gmail dot com
17 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 );
$pdoObj->setAttribute("PDO::ATTR_ERRMODE", PDO::ERRMODE_EXCEPTION);
up
-1
marcos at marcosregis dot com
15 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:
<?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;
To Top