PDO::prepare

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

PDO::prepareÇalıştırılmak üzere bir deyimi hazırlar ve bir deyim nesnesi olarak döndürür

Açıklama

publicPDO::prepare(string$deyim, array$seçenekler = []): PDOStatement|false

PDOStatement::execute() yöntemi ile çalıştırılmak üzere bir SQL deyimi hazırlar. Deyim şablonu sıfır veya daha fazla sayıda birer isimle (:isim) veya birer soru imi (?) ile ifade edilen bağımsız değişken içerebilir. Deyimin çalıştırılması sırasında bu bağımsız değişkenlere farklı değerler atanarak aynı deyim defalarca kullanılabilir. Aynı deyim şablonunda hem isimli hem de soru imli bağımsız değişkenleri kullanamazsınız. İkisinden birini seçmek zorundasınız. Herhangi bir kullanıcı girişini bağlamak için bu bağımsız değişkenleri kullanın, kullanıcı girişini doğrudan sorguya dahil etmeyin.

PDOStatement::execute() işlevinde aktaracağınız her değer için eşsiz bir bağımsız değişken imleyici belirtmelisiniz. Öykünme kipi açık olmadığı sürece, hazırlanmış bir ifadede aynı ismi birden fazla isimli bağımsız değişken işaretçisinde kullanamazsınız.

Bilginize:

Bağımsız değişken işaretçileri yalnızca eksiksiz bir değişmez veriyi temsil edebilir. Ne değişmez parçasının, ne anahtar sözcük, ne tanımlayıcı ne de herhangi bir keyfi sorgu parçasının bağımsız değişken kullanılarak bağlanması mümkün değildir. Örneğin, bir SQL ifadesinin IN() yan tümcesinde tek bir bağımsız değişkene birden çok değer bağlayamazsınız.

Bir SQL deyiminin farklı değerlerle defalarca çalıştırılmak üzere PDO::prepare() ve PDOStatement::execute() yöntemlerine aktarılması, bu SQL deyimiyle ilgili sorgu planının ve temel verilerin müzakere edilmek üzere sürücü tarafından istemci ve/veya sunucu tarafında önbelleklemesiyle uygulamanızın başarımını yükseltecek en iyilemelerin yapılması mümkün olur. Ayrıca, PDO::prepare() ve PDOStatement::execute() işlevlerinin kullanımı, bağımsız değişkenlerin elle öncelenmesi gereğini ortadan kaldırarak SQL zerk saldırılarını engellemeye yardımcı olur.

Bağımsız değişkenli hazır deyimlerin değerlerle ilişkilendirilmesi işlemini desteklemeyen sürücüler için PDO bu işlemi taklit eder. Ayrıca sürücü isimli ve soru imli bağımsız değişken aktarım tarzlarından yalnız birini destekliyorsa PDO diğer tarzı da taklit eder.

Bilginize: Öykünülmüş hazırlanmış ifadeler ve isimli veya soru işareti tarzı bağımsız değişkenlerinin yeniden yazılması için kullanılan çözümleyici, tek ve çift tırnaklar için standart olmayan tersbölülü öncelemeyi destekler. Bu, bir tersbölü ile öncelenmiş sonlandırma tırnaklarında bu kullanımın desteklenmediği anlamına gelir, bu da bağımsız değişkenlerin yanlış algılanmasına neden olarak hazırlanan ifadenin yürütüldüğünde başarısız olmasına sebep olabilir. Çözüm, bu tür SQL sorguları için öykünülmüş hazırlıklar kullanmamak ve sürücü tarafından yerel olarak desteklenen bir bağımsız değişken tarzı kullanarak bağımsız değişkenlerin yeniden yazılmasını önlemektir.

PHP 7.4.0 ve sonrasında, soru imleri kendileri ile öncelenebiliyor. Yani, ?? dizgesi artık veritabanına ? dizgesi olartak gönderiliyor.

Bağımsız Değişkenler

deyim

Hedef veritabanı sunucusu için geçerli bir SQL deyimi şablonu olmalıdır.

seçenekler

Bu yöntemden döndürülen PDOStatement nesnesi için atanacak öznitelik değerlerini isim=>değer çiftleri halinde içeren bir dizi. Çoğunlukla kaydırılabilen bir gösterici isteği için PDO::CURSOR_SCROLL özniteliğine PDO::ATTR_CURSOR değerini atamakta kullanılır. Bazı sürücülerin deyimin hazırlanması aşamasında atanabilen sürücüye özgü öznitelikleri vardır.

Dönen Değerler

Veritabanı sunucusu deyimi başarıyla hazırlayabilmişse PDO::prepare() bir PDOStatement nesnesi döndürür; aksi takdirde ya bir PDOException yavrulanır veya işlev false döndürür (hata işlemeye bağımlı olarak).

Bilginize:

Öykünülmüş hazır deyimler için veritabanı sunucusuyla müzakere yapılmadığından PDO::prepare() deyim üzerinde bir sınama yapmaz.

Hatalar/İstisnalar

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.

Örnekler

Örnek 1 - İsimli bağımsız değişkenli SQL deyim şablonu

<?php

$sql = 'SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour'
;
$sth = $dbh->prepare($sql, [PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY]);
$sth->execute(['calories' => 150, 'colour' => 'red']);
$red = $sth->fetchAll();

$sth->execute([':calories' => 175, ':colour' => 'yellow']);
$yellow = $sth->fetchAll();
?>

Örnek 2 - Soru imli SQL deyim şablonu

<?php

$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < ? AND colour = ?'
);
$sth->execute([150, 'red']);
$red = $sth->fetchAll();
$sth->execute([175, 'yellow']);
$yellow = $sth->fetchAll();
?>

Örnek 3 - Soru imi öncelemeli SQL deyim şablonu

<?php

$sth = $dbh->prepare('SELECT * FROM issues WHERE tag::jsonb ?? ?');
$sth->execute(['feature']);
$featureIssues = $sth->fetchAll();
$sth->execute(['performance']);
$performanceIssues = $sth->fetchAll();
?>

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::query() - Bir SQL deyimini yer tutucular olmaksızın hazırlar ve çalıştırır
  • PDOStatement::execute() - Bir hazır deyimi çalıştırır
To Top