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 — Bir SQL deyimini yer tutucular olmaksızın hazırlar ve çalıştırır
$deyim
, ?int $getirme_kipi
= PDO::FETCH_COLUMN, int $sütun_num
): PDOStatement|false$deyim
,$getirme_kipi
= PDO::FETCH_CLASS,$sınıf_adı
,$kurucu_bağımsız değişkenleri
$deyim
, ?int $getirme_kipi
= PDO::FETCH_INTO, object $nesne
): PDOStatement|falseBir SQL deyimini tek bir işlev çağrısında çalıştırır ve deyimi bir PDOStatement nesnesi olarak döndürür.
Defalarca yineleyeceğiniz bir sorguyu PDO::prepare() yöntemini kullanarak bir PDOStatement nesnesi haline getirip bunu PDOStatement::execute() ile defalarca çalıştırmak başarımı arttıracaktır.
Tekrar bir PDO::query() çağrısı yapmadan önce sonuç kümesindeki veriyi almazsanız çağrınız başarısızlıkla sonuçlanabilir. Yeni bir PDO::query() çağrısını yapmadan önce PDOStatement nesnesi ile ilişkilendirilmiş kaynakları serbest bırakmak için PDOStatement::closeCursor() çağrısı yapmalısınız.
Bilginize:
deyim
yer tutucular içeriyorsa, deyim PDO::prepare() ve PDOStatement::execute() yöntemleri kullanılarak hazırlanıp çalıştırılmalıdır.
deyim
Hazırlanacak ve çalıştırılacak SQL deyimi.
SQL deyimi yer tutucular içeriyorsa, bu yöntem yerine PDO::prepare() ve PDOStatement::execute() yöntemleri kullanılmalıdır. Veya, SQL deyimi PDO::query() çağrılmadan önce elle hazırlanmalı, sürücü destekliyorsa PDO::quote() kullanılarak düzgünce öncelenmelidir.
getirme_kipi
Döndürülen PDOStatement nesnesi için
öntanımlı getirme kipi.
PDO::FETCH_*
sabitlerinden biri olmalıdır.
İşleve fazladan bağımsız değişken aktarılırsa, bunlar sonuç nesnesi üzerinde PDOStatement::setFetchMode() çağrısı yapılmış gibi ele alınır. Sonraki bağımsız değişkenler, seçilen getirme kipine bağlı olarak değişir.
Başarı durumunda PDOStatement
nesnesi, başarısızlık durumunda false
döner.
PDO::ATTR_ERRMODE
özniteliğine
PDO::ERRMODE_WARNING
atanırsa
E_WARNING
düzeyinde bir hata çıktılanır.
PDO::ATTR_ERRMODE
özniteliğine
PDO::ERRMODE_EXCEPTION
atanırsa
PDOException istisnası oluşur.
Örnek 1 - Yer tutucu içermeyen SQL deyimi kullanılan PDO::query() örneği
<?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";
}
?>
Yukarıdaki örneğin çıktısı:
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);
?>
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
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;
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 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);