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);
?>(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.2.0)
PDO::query â PrĂ©pare et ExĂ©cute une requĂȘte SQL sans marque substitutive
$query, ?int $fetchMode = PDO::FETCH_COLUMN, int $colno): PDOStatement|false$query,$fetchMode = PDO::FETCH_CLASS,$classname,$constructorArgs$query, ?int $fetchMode = PDO::FETCH_INTO, object $object): PDOStatement|falsePDO::query() prĂ©pare et exĂ©cute une requĂȘte SQL en un seul appel de fonction, retournant la requĂȘte en tant qu'objet PDOStatement.
Pour une requĂȘte qu'il faut exĂ©cuter plusieurs fois, on rĂ©alisera de meilleures performances si l'on prĂ©pare l'objet PDOStatement en utilisant la fonction PDO::prepare() et exĂ©cute la requĂȘte via plusieurs appels Ă la fonction PDOStatement::execute().
Si on ne récupÚre pas toutes les données du jeu de résultats avant d'exécuter le prochain appel à PDO::query(), l'appel peut échouer. Appeler PDOStatement::closeCursor() pour libérer les ressources de la base de données associées à l'objet PDOStatement avant d'exécuter le prochain appel à la fonction PDO::query().
Note:
Si
querycontient des marqueurs de substitution, la requĂȘte doit ĂȘtre prĂ©parĂ©e et exĂ©cutĂ©e sĂ©parĂ©ment en utilisant les mĂ©thodes PDO::prepare() et PDOStatement::execute().
queryLa requĂȘte SQL Ă prĂ©parer et Ă exĂ©cuter.
Si le SQL contient des marqueurs de substitution, PDO::prepare() et PDOStatement::execute() doivent ĂȘtre utilisĂ©s Ă la place. Alternativement, le SQL peut ĂȘtre prĂ©parĂ© manuellement avant d'appeler PDO::query(), avec les donnĂ©es correctement formatĂ©es en utilisant PDO::quote() si le pilote le supporte.
fetchMode
Le mode de récupération par défaut pour le
PDOStatement retourné.
Ceci doit ĂȘtre une des constantes
PDO::FETCH_*.
Si cet argument est passĂ© Ă la fonction, le reste des arguments seront traitĂ©s comme si PDOStatement::setFetchMode() avait Ă©tĂ© appelĂ© sur l'objet de la requĂȘte rĂ©sultante. Les arguments suivants dĂ©pendent du mode de rĂ©cupĂ©ration sĂ©lectionnĂ©.
Retourne un objet PDOStatement ou false si une erreur survient.
Ămet une erreur de niveau E_WARNING si l'attribut PDO::ATTR_ERRMODE est dĂ©fini
Ă PDO::ERRMODE_WARNING.
LÚve une exception PDOException si l'attribut PDO::ATTR_ERRMODE est défini
Ă PDO::ERRMODE_EXCEPTION.
Exemple #1 SQL sans marqueurs de substitution peut ĂȘtre exĂ©cutĂ© en utilisant 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";
}
?>L'exemple ci-dessus va afficher :
apple red 150 banana yellow 250 kiwi brown 75 lemon yellow 25 orange orange 300 pear green 150 watermelon pink 90
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);
?>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);
?>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;> 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);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");
}
?>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