PDO::query

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

PDO::queryBir SQL deyimini çalıştırıp sonucu bir PDOStatement nesnesi olarak döndürür

Açıklama

PDOStatement PDO::query ( string $deyim )
PDOStatement PDO::query ( string $deyim , int $PDO::FETCH_COLUMN , int $sütunnum )
PDOStatement PDO::query ( string $deyim , int $PDO::FETCH_CLASS , string $sınıfadı , array $kurucu_değiştirgeleri )
PDOStatement PDO::query ( string $deyim , int $PDO::FETCH_INTO , object $nesne )

Bir SQL deyimini tek bir işlev çağrısında çalıştırır ve sorgu sonucunu (bir sonuç varsa) 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:

Bu işlev, tek bir değiştirgeye sahipmiş gibi belgelendirilmesine rağmen işleve başka değiştirgeler de aktarabilirsiniz. Bunlar, sonuç nesnesi üzerinde PDOStatement::setFetchMode() çağrısı yapılmış gibi ele alınırlar.

Değiştirgeler

deyim

Hazırlanacak ve çalıştırılacak SQL deyimi.

Sorguda kullanılacak verilerin düzgün olarak öncelenmesi gerekir.

Dönen Değerler

Başarısızlık durumunda FALSE, aksi takdirde bir PDOStatement nesnesi.

Örnekler

Örnek 1 - PDO::query() örneği

PDO::query() yönteminin tek özelliği başarıyla çalıştırılmış bir SELECT deyiminden dönen sonuç kümesi üzerinde satır satır verilere erişilebilmesini mümkün kılmasıdır.

<?php
function getFruit($conn) {
    
$sql 'SELECT name, colour, calories FROM fruit ORDER BY name';
    foreach (
$conn->query($sql) as $row) {
        print 
$row['NAME'] . "\t";
        print 
$row['COLOUR'] . "\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

Ayrıca Bakınız

  • PDO::exec() - Belirtilen SQL deyimini çalıştırır ve etkilenen satır sayısını döndürür
  • PDO::prepare() - Çalıştırılmak üzere bir deyimi hazırlar ve bir deyim nesnesi olarak döndürür
  • PDOStatement::execute() - Bir hazır deyimi çalıştırır

add a note add a note

User Contributed Notes 9 notes

up
36
fredrik at NOSPAM dot rambris dot com
10 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
10
stefano[dot]bertoli [at] gmail[dot]com
3 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
5
paolo at dellunto dot net
4 years ago
If you are using PDO to create an SQLite dbfile that will be used by an Android application, you can set common values via the $dbh->query("PRAGMA ...") statement;

a tipical example would be the user_version of the database or the page_size
<?php
...
$dbh = new PDO($PDO_DSN, null, null, null);
$dbh->query("PRAGMA page_size = 4096"); //Android match page size
$dbh->query("PRAGMA user_version = 2"); //This match super(context, DB_NAME, null, DB_VERSION) of the DatabaseOpenHelper
....
?>
up
2
tgrl5000
2 years ago
Connecting
==============================
<?php
try{
$db = new PDO("dbtype:host=yourhost;dbname=yourdbname;charset=utf8","username","password");
/*Other Codes*/
}catch(PDOException  $e ){
echo
"Error: ".$e;
}
?>
Excute query with secure data
==============================
<?php
try{
$db = new PDO("dbtype:host=yourhost;dbname=yourdbname;charset=utf8","username","password");
$mysecuredata=14;
$db->query("Select * from table where id=".$mysecuredata);
}catch(
PDOException  $e ){
echo
"Error: ".$e;
}
?>
Excute query with insecure data
==============================
<?php
try{
$db = new PDO("dbtype:host=yourhost;dbname=yourdbname;charset=utf8","username","password");
$myinsecuredata=$_GET["id"];
$query=$db->prepare("Select * from table where id=?");
$query->excute(array($myinsecuredata));
}catch(
PDOException  $e ){
echo
"Error: ".$e;
}
?>
Getting Data in database
==============================
<?php
try{
$db = new PDO("dbtype:host=yourhost;dbname=yourdbname;charset=utf8","username","password");
$myinsecuredata=$_GET["table"];
$query=$db->prepare("Select * from ?");
$query->excute(array($myinsecuredata));
while(
$row=$query->fetch(PDO::FETCH_OBJ)) {
/*its getting data in line.And its an object*/
       
echo $row->yourcolumnname;
    }
}catch(
PDOException  $e ){
echo
"Error: ".$e;
}
?>
Reference
==============================
http://gencbilgin.net/pdo-kullanimi-php-de-veritabani-islemleri.html
up
5
dozoyousan at gmail dot com
11 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
andrea at bhweb dot it
9 years ago
If someone is suffering of the "MySQL server has gone away" problem after executing multiple queries, this is a solution that solved it for me. It's similar to the one needed for the exact same problem in mysqli.

<?php
$stmt
=$db->prepare($query);
$stmt->execute();
do {
$stmt->fetch(); $stmt->closeCursor(); ++$line; } while($stmt-
>
nextRowset());
?>

I found this only works using prepare and execute this way, not if you
directly execute the query with query().
up
0
marcos at marcosregis dot com
9 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;
up
-9
nicobn at gmail dot com
10 years ago
Please note that when Query() fails, it does not return a PDOStatement object . It simply returns false.
up
-58
NUNTIUS
9 years ago
I found this method extremely useful for getting the iteration count. Note the usage of "for" instead of "while" or "foreach". Just place the "$row = $query->fetch()" as the second condition of your for loop (which is do until). This is the best of both worlds IMHO. Criticism welcome.

try {
    $hostname = "servername";
    $dbname = "dbname";
    $username = "username";
    $pw = "password";
    $pdo = new PDO ("mssql:host=$hostname;dbname=$dbname","$username","$pw");
  } catch (PDOException $e) {
    echo "Failed to get DB handle: " . $e->getMessage() . "\n";
    exit;
  }
      $query = $pdo->prepare("select name FROM tbl_name");
      $query->execute();
     
      for($i=0; $row = $query->fetch(); $i++){
        echo $i." - ".$row['name']."<br/>";
      }

      unset($pdo);
      unset($query);
To Top