PHP PDO Kullanımı

PDO (PHP Veri Nesneleri), çeşitli veritabanlarına erişmek için basit bir arayüz sağlayan PHP için bir eklentidir. Veritabanından bağımsız olarak sorgulama ve veri getirme konusunda yardımcı olan bir veri soyutlama katmanı olarak davranır.

MySQL uzantısı kullanmaya devam ediyorsanız kullanmayı bırakınız. MySQL eklentisi artık tamamen PHP7.0 sürümünden kaldırıldı. MySQL yerine PDO eklentisini kulllanın.

PDO, web uygulamalarında ekstra güvenlik katmanı sağlayan daha güvenli yollara sahip olduğundan temiz ve güvenli kod yazmanıza olanak tanır. PDO, bir veya daha fazla farklı veritabanına erişmenin en kolay yolunu sağlayan kendi temel işlevlerine ve methodlarına sahiptir.

Yıllar geçtikçe, veritabanları uzun bir yol kat etti ve şimdi birçok farklı yazılım firması modern PHP uygulamalarına güç veren popüler Veritabanı Yönetim Sistemi (Database Management System – DBMS) 'ler sunuyor. PHP, geliştirme uygulamalarını standartlaştırmak ve kolaylaştırmak için PHP 5.1'de PHP Veri Nesneleri'ni (PDO) tanıttı. Bu nesneler, PDO veritabanı bağlantılarını kurmak için kullanılır.

php pdo

PDO, PHP uygulamalarında veritabanlarına erişmek ve yönetmek için hızlı ve tutarlı bir arayüz sağlayan bir veritabanı erişim katmanıdır. Her DBMS, PHP uygulamalarında PDO kullanırken kurulu olması gereken belirli bir PDO sürücüsüne sahiptir.

PDO sürücüsünün yazdığı herhangi bir veritabanını destekleyebilir. Bu yazı yazıldığı sırada aşağıdaki veritabanı sürücüleri kullanılabilir:

Varsayılan olarak, PHP'nin PDO_mysql sürücüsü yüklüdür. Ancak, diğer veritabanlarıyla çalışmak isterseniz, önce ilgili sürücüyü yüklemeniz gerekir.

sisteminizde hangi sürücülerin yüklü olduğunu kontrol etmek için yeni bir PHP dosyası oluşturun ve aşağıdaki kod parçacığını ekleyin.

<?php

print_r(PDO::getAvailableDrivers());

?>

Veritabanına bağlanma


Bağlantılar temel PDO sınıfının örneklenmesiyle kurulur. Hangi sürücüyü kullanacağınızın bir önemi yoktur; daima PDO sınıf ismini kullanmanız gerekir. DSN (Veri Kaynağı Adı) ve isteğe bağlı olarak kullanıcı ismini ve parolasını belirtmek için kurucuyu kullanabilirsiniz.

PDO komutlarımızı kullanabileceğimize göre MySQL için veritabanı bağlantımızı yapalım.

<?php

$db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8mb4',

'username', 'password');

?>

Bağlantı kodunda charset=utf8mb4 belirttim fakat isteğe bağlı olarak aşağıdaki gibi de kullanabilirsiniz.

$db->query("SET CHARACTER SET utf8mb4");

Farklı veritabanlarında biraz farklı bağlantı yöntemleri olabilir. Aşağıda, en popüler veritabanlarından bazılarına bağlanma yöntemi gösterilmektedir. İlk üçünün aynı olduğunu, diğer veritabanı türü SQLite'nin kendi sözdizimi olduğunu fark edeceksiniz.

<?php
# PDO_DBLIB, MS SQL Server ve Sybase

$db = new PDO("mssql:host=localhost;dbname=testdb, user, pass");

$db = new PDO("sybase:host=localhost;dbname=testdb, user, pass");

# SQLite Database

$db = new PDO("sqlite:my/database/path/database.db");
}
?>

Diğer sürücülerin DSN ifadeleri için şuraya bakın.

İstisnalar ve PDO


PDO, hatalarla ilgili istisnalar atabilir, bu yüzden her şey try / catch bloğunda olmalıdır.

$dsn = 'mysql:host=localhost;dbname=test';

$user = 'root';

$password = '123';
 
try {

    $db = new PDO($dsn, $user, $password);

} catch (PDOException $e) {

    echo 'Connection failed: ' . $e->getMessage();
}

Bir hata oluşursa bu bir PDOException istisnasına sebep olur. Bağlantı oluşturulduktan hemen sonra, PDO üç hata modundan herhangi birine aktarılabilir:

$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT );  

$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING ); 

$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

Veritabanına bağlanmaya çalışırken bir hata her zaman bir istisna atar.

PDO :: ERRMODE_SILENT

Bu varsayılan moddur. Mysql ve mysqli uzantılarındaki hataları yakalamak için muhtemelen en çok aynı şeyi kullanırsınız. Aşağıdaki iki mod, DRY programlama için daha uygundur .

PDO :: ERRMODE_WARNING

Bu mod Standart Uyarıyı çağırır ve komut dosyasının yürütülmesine devam etmesine izin verir. Hata ayıklama için uygun.

PDO :: ERRMODE_EXCEPTION

Çoğu durumda, bu tür komut dosyası denetimi tercih edilir. Hataları ustalıkla ele almanıza ve hassas bilgileri gizlemenize izin veren bir istisna atar. Aşağıdaki kodlar istisnaların avantajlarını gösteren bir örnek

try {  
  // veritabanına bağlantı
 $db = new PDO('mysql:host=localhost;dbname=deneme;charset=utf8mb4',
 
'root', '1234');

$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );  
   
  # SELECT! Yerine DELECT yazdık!
 
$db->prepare('DELECT ad FROM test')->execute();  
}  
catch(PDOException $e) { 
 
 echo "mesaj...: ".$e->getMessage(); //hata çıktısı 

}

SELECT ifadesinde kasıtlı olarak yanlış yazıldı. Bu bir hata mesajı verecektir.

Bir Bağlantının Kapatılışı


Veritabanı değişkenini null olarak ayarlayarak herhangi bir bağlantıyı kapatabilirsiniz.

<?php

$db = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
// Veritabanına bağlanıyoruz.

// İşimiz bittiğine göre bağlantıyı kapatabiliriz.
$db = null;
?>

Çoğu HTTP uygulaması veritabanı sunucularına kalıcı bağlantılardan medet umar. Kalıcı bağlantılar betiğin işi bittiğinde kapatılmaz, önbelleğe alınıp aynı kimlik kanıtlarıyla bağlantı kurmak isteyen başka betiklerce kullanılır. Kalıcı bağlantı önbelleği, bir betiğin bir veritabanı ile her iletişime geçme isteğinde yeni bir bağlantı kurma zamanını ortadan kaldırır ve uygulamanın daha hızlı çalışmasını sağlar.

Kalıcı Bağlantılar


<?php

$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(
    PDO::ATTR_PERSISTENT => true
));
?>
Kalıcı bağlantı kullanmak için PDO kurucusuna aktarılan sürücü seçenekleri dizisinde PDO::ATTR_PERSISTENT sabitine TRUE atamalısınız. Nesneyi oluşturduktan Nesne başlatıldıktan sonra bu özellik PDO :: setAttribute() ile ayarlanırsa, sürücü kalıcı bir bağlantı kullanmayacaktır.

Sorgu Yürütme Türleri


Temel olarak üç tür sorgu yürütme vardır.

Sonuç kümesi olmadan sorgu yürütme: INSERT, UPDATE ve DELETE gibi sorgular sonuç kümesini döndürmez ve yalnızca etkilenen satır sayısı hakkında bilgi verir.

Sonuç kümesiyle sorgu yürütme: SELECT gibi sorgu genellikle sonuç kümesini ve döndürülen satır sayısını döndürür.

Sorgu, birden fazla yürütüldü: Örneğin, farklı verileri ileterek INSERT sorgusu birden fazla çalıştırılabilir.

Veritabanına bağlantı başarıyla oluşturulduktan ve PDO nesne örneği oluşturulduktan sonra, nesne SQL sorguları gerçekleştirmek için kullanılabilir.

PDO ile SQL sorguları iki yolla yapılabilir:

exec() Method


Tablodaki satırları değiştiren ancak satır ve sütunlarla sonuç kümesi döndürmeyen sorgular (INSERT, UPDATE ve DELETE), exec() methodu ile gönderilir , bu yöntem, etkilenen satırların sayısını veya hata durumunda "0" değerini döndürür.

PDO::exec() yöntemi bir SELECT deyiminin sonucunu döndürmez. Bir SELECT deyimini uygulamanız boyunca sadece bir defa çalıştıracaksanız PDO::query() yöntemini kullanabilirsiniz. Defalarca çalıştıracaksanız PDO::prepare() ile bir PDOStatement nesnesi hazırlayıp bunu PDOStatement::execute() ile çalıştırabilirsiniz.

PDO::exec() methodu çalıştırılan SQL deyimiyle silinen veya değiştirilen satırların sayısını döndürür. Etkilenen satır yoksa PDO::exec() 0 (sıfır) döndürür.

Bu method mantıksal FALSE değeriyle dönebileceği gibi FALSE olarak değerlendirilebilecek mantıksal olmayan bir değerle de dönebilir. Bu fonksiyondan dönen değeri sınamak için === işlecini kullanınız.

Aşağıda, dönüş değerinin yanlış ele alındığı bir örneğe yer verilmiştir. Etkilenen satır sayısı 0 (sıfır) olduğu için die() fonksiyonu çağrılmaktadır:

$db->exec() or die(print_r($db->errorInfo(), true));

Veritabanına Veri Ekleme() INSERT

Veriyabanımızda id, ad, soyad, email sütunları olsun.

$ekle = $db->exec("INSERT INTO test (ad, soyad, email)
VALUES ('$ad', '$soyad', '$email')");

SQL Hata Mesajı Nasıl Alınır?


errorInfo() Hata oluştuğunda hata mesajını almak için bu methodu kullanırız. Bu yöntem bir dizi döndürecektir. Bu dizi üç öğeden oluşur. 0 (sıfır) öğesi, SQLSTATE kodunu temsil eder. 2. eleman, veritabanı sürücüsüne özel hata kodunu içerir. Ve 3. öğe veritabanı sürücüsüne özel hata mesajını içerir.

$db->errorInfo();

Veritabanına ekleyiniz sorgumuz en son şu halde olmalı.

$ekle = $db->exec("INSERT INTO test (ad, soyad, email)
VALUES ('$ad', '$soyad', '$email')")or die(print_r($db->errorInfo(), true));
Veritabanına yukarıdaki SQL ifade ile kayıt ekleyelim yanlız bir sütunu boş bırakalım örnek olarak email alanı veri eklemeyelim.

$ekle = $db->exec("INSERT INTO test (ad, soyad)
VALUES ('$ad', '$soyad')")or die(print_r($db->errorInfo(), true));

ÇIKTI:

General error: 1364 Field 'email' doesn't have a default value

Bazen bazı sütunlara veri girmek istemeyebiliriz örnek verirsek bu tabloda hit alanı olsa sadece makale okunduğunda bu alanın değişmesini isteyebiliriz bunun için tablomuzun bu alanının verisi bu sorgu ile değiştirilmeyeceği için bu alanı SQL sorgusunda boş geçtiğimizde bize veritabanı hata verecektir bu sorunu aşmak için:


$sql = "INSERT IGNORE INTO test (ad, soyad) VALUES ('$ad', '$soyad')"

MySQL veritabanı varsayılan bir değer kümesine sahip olmadığı boş alanlara izin vermeyecek INSERT veya UPDATE komut çalışmayacaktır MySQL katı modda çalışmasından kaynaklanır. SQL ifademize IGNORE ifadesi ekleyerek verimiz veritabanına eklenecektir.

Tabloya birden çok satır eklemek için INSERT deyimi kullandığınızda ve işlem sırasında bir hata oluşursa, MySQL ifadeyi sonlandırır ve bir hata döndürür. Sonuç olarak, tabloya hiçbir satır eklenmez.

Ancak, INSERT IGNORE deyimi kullanırsanız, hataya neden olan geçersiz verilere sahip satırlar dikkate alınmaz ve geçerli verilere sahip satırlar tabloya eklenir.

IGNORE ifadesi, MySQL veritabanının bir özelliğidir. SQL standardına değil, MYSQL'de SQL ifadelerin bir uzantısı olduğunu unutmayın .

SQL Injection


SQL Injection, veri tabanına dayalı uygulamalara saldırmak için kullanılan bir atak tekniğidir. Ayrıca MySQL katı modda çalıştığından metinlerde yer alan tırnak ifadelerinden dolayı hata verecektir. Daha önce bu özel karakterlerden kaçmak için mysql_real_escape_string() kodu kullanıyorduk PDO ile PDO::quote methodu gelmiştir.


$login = $db->quote($_POST["login"]);

PDO::quote Methodu, mesajı tırnaklar içine otomatik sarar SQL ifadelerde tırnak içinde belirtmeyin.

$ders="PHP";

$ad = $db->quote($ders);

echo $ad; //ÇIKTI: 'PHP'

veritabanını PDO::quote Methoduna göre düzenlersek:

$db = new PDO('mysql:host=localhost;dbname=test', $user, $pass);

$ad = $db->quote($_POST["ad"]);

$soyad = $db->quote($_POST["soyad"]);

$email = $db->quote($_POST["email"]);

$ekle = $db->exec("INSERT INTO test (ad, soyad, email)
VALUES ($ad, $soyad, $email)");

PDO::quote methodu kullanırken SQL ifadede values(Değerler) içindeki değişkenler tırnak içine alınmayacaktır çünkü methodun kendi otomatik oluşturur.


values( '$ad', '$soyad', '$email' ) ifade yanlış, values( $ad, $soyad, $email ) doğru

Son otomatik olarak eklenen "id" (AUTO_INCREMENT PRIMARY KEY sütunu) almak için lastInsertId () yöntemini kullanın. SQL INSERT deyimi için kullanılır.

echo $db-> lastInsertId ();

Not: Aynı INSERT sorgusuna birden fazla satır eklediğinizde, bu yöntem ilk eklenen satırın kimliğini döndürür.

Kaç satır etkilenmiştir.

echo $ekle;

UPDATE ve DELETE , bir tablodaki verileri değiştiren ancak satır ve sütunlarla sonuç kümesini döndürmeyen SQL yönergeleridir. Exec() yöntemi ile INSERT deyimi ile aynı şekilde yürütülebilirler.

GÜNCELLEŞTİRME (UPDATE)


MySQL tablonun satırlarındaki veriler, SQL komutu UPDATE ile değiştirilebilir .

$ekle =$db->exec("UPDATE test SET ad='Levent' WHERE id=2")

or die(print_r($db->errorInfo(), true));

Veritabanında Veri Sil (DELETE)


SİL (DELETE) talimat bir tablonun satırlarını siler.

$ekle =$db->exec("DELETE FROM test WHERE id=3) 

or die(print_r($db->errorInfo(), true));

PDO::query() Method


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

Bir SQL deyimini tek bir method çağrısında çalıştırılır ve sorgu sonucunu (bir sonuç varsa) bir PDOStatement nesnesi olarak döndürür.

Birden fazla yapılacak bir sorgu için, PDO::prepare() kullanarak bir PDOStatement nesnesi hazırlarsanız ve PDOStatement::execute() öğesine yapılan çoklu çağrılar ile ifadeyi düzenlerseniz daha iyi performans elde edersiniz.

$oku = $db->query("SELECT * FROM test");

$oku = $oku->fetchAll(PDO::FETCH_ASSOC); //verilerin hepsi

foreach ($oku as $row) {

extract($row);

echo "Adı:..$ad Soyad:..$soyad Email:..$email
"; }

Tek veri getirme

$oku = $db->query("SELECT * FROM test where id=2");

$oku = $oku->fetch(PDO::FETCH_ASSOC); // Tek veri

extract($oku);

echo "Adı:..$ad Soyad:..$soyad Email:..$email
";

Satır Sayısını alma


PDOStatement::rowCount(), karşılık gelen PDOStatement nesnesi tarafından yürütülen son DELETE, INSERT veya UPDATE deyiminden etkilenen satır sayısını döndürür.

  $count = $oku->rowCount();

Eğer PDOStatement nesnesi ile ilişkili deyim bir SELECT deyimi ise bazı veritabanları bu deyimden etkilenen satır sayısını da döndürebilmektedir. Ancak bu davranış tüm veritabanları için garanti edilmediğinden taşınabilir bir uygulamada bu davranışa itibar edilmemelidir.

Sorgumuz şu şekilde olmalı

$oku = $db->query("SELECT * FROM test");

echo "Etkilenen satır:".$count = $oku->rowCount(); 

Veri Alma Yöntemleri


php pdo

data->fetch() methodu kullanılarak alınabilir. Verileri aramadan önce, hangi biçime ihtiyaç duyulduğunu açıkça belirtmeniz önerilir. Birkaç seçenek var:

FETCH_LAZY ifadesi betiği yavaşlatır, bu yüzden onu kullanmayın.

Pratikte, üç özellik sizin için yeterlidir: FETCH_CLASS, FETCH_ASSOC ve FETCH_OBJ. Veri formatını ayarlamak için aşağıdaki sözdizimini kullanın:

 $oku->fetch(PDO::FETCH_ASSOC); 

FETCH_CLASS


Bu getirme yöntemi, verileri doğrudan seçtiğiniz bir sınıfa getirmenizi sağlar. FETCH_CLASS kullanırken, nesnenizin özellikleri kurucuyu çağırmadan ÖNCE ayarlanır. Bu çok önemli. İlgili sütun adının özellikleri yoksa, sizin için böyle bir özellik ( genel olarak ) oluşturulur .

Bu, veri tabanından çıkarıldıktan sonra verilerin dönüştürülmesi gerektiğinde, nesne oluşturulduktan hemen sonra otomatik olarak gerçekleştirilebileceği anlamına gelir.

class User
{
  public $ad;
  public $soyad;
  public $email;
  public function showInfo()
  {
  echo "
".$this->ad."
".$this->soyad."
".$this->email."
"; } } $oku = $db->query("SELECT * FROM test"); $result = $oku->FETCHALL(PDO::FETCH_CLASS, "User"); foreach($result as $user) { $user->showInfo(); }
Oluşturulan sınıftaki özelliklerin adları, veritabanındaki alanların adları ile aynı olmalıdır.

Ekleme ve Güncelleme


Yeni veri eklemek ve mevcut verileri güncellemek en sık kullanılan veritabanı işlemlerinden biridir. PDO kullanarak, bu normalde iki aşamalı bir işlemdir. Bu bölümdeki her şey UPDATE ve INSERT işlemlerine eşit olarak uygulanır.

php pdo

Yeni veriler eklemek için önemsiz bir örnek:


$oku = $db->prepare("INSERT INTO ders ( isim ) values ( 'css' )");

$oku->execute();

Aslında, aynı şeyi bir exec() Methoduyla'da yapabilirsiniz, ancak daha uzun yöntemi kullanacaksınız, böylece hazırlanmış ifadelerden yararlanabilirsiniz. Sadece bir kez kullanacak olsanız bile, hazırlanmış ifadeleri kullanarak sizi SQL enjeksiyon saldırılarına karşı korumaya yardımcı olur.

Hazırlanmış İfadeler

Hazırlanan ifadeleri kullanmak, SQL enjeksiyonlarına karşı korumayı artırır.

Hazırlanan bir ifade, sunucuya yalnızca farklı veri kümeleri göndererek sürekli olarak çalıştırılabilen önceden derlenmiş bir SQL ifadesidir. Bu, yer tutucularda kullanılan verilerin otomatik olarak SQL enjeksiyon saldırılarına karşı güvenli hale getirilmesi avantajına sahiptir.

Aşağıda hazırlanan ifadelerin üç örneği vardır.

# Yer tutucu olmadan - SQL enjeksiyon kapısı açık!

$oku = $db->prepare("INSERT INTO okul (ad, ders, not) 
values ($ad, $ders, $not)");
 
# adsız yer tutucuları

$oku = $db->prepare("INSERT INTO okul (ad, ders, not) 
values (?, ?, ?);
 
#  adlandırılmış yer tutucuları

$oku = $db->prepare("INSERT INTO okul (ad, ders, not) 
value (:ad, :ders, :not)");

İlk yöntemden kullanmak istemezsiniz; Burdaki örnekte yer alması karşılaştırma yapmak için, İsimsiz ve adlandırılmış yer tutucular arasındaki fark, hazırlanan ifadelere nasıl aktaracağınızdır.

# Her bir yer tutucuya değişkenler atayın, index 1-3
$oku->bindParam(1, $ad);
$oku->bindParam(2, $ders);
$oku->bindParam(3, $not);
 
# Bir satır ekle
$ad = "Ali"
$ders = "matematik";
$not = 80;
$oku->execute();
 
#  farklı değerler içeren başka bir satır ekle
$ad = "Mehmet"
$ders = "Fizik";
$not = 100;
$oku->execute();

İlk önce, tüm yer tutuculara değişkenler atarız. Daha sonra bu değişkenlere değerler atar ve sorguyu yürütürüz. Yeni bir veri seti göndermek için, sadece değişkenlerin değerlerini değiştirin ve tekrar sorgulayın.

SQL'inizde çok fazla parametre varsa, her birini bir değişkene atamak çok sakıncalıdır. Bu gibi durumlarda, verileri bir dizide saklayabilir ve aktarabilirsiniz:

#  eklemek istediğimiz veriler
$data = ['Ali', 'aaaa@mail.com', 'Ankara'];
 
$oku = $db->prepare("INSERT INTO test (ad, email, sehir) values (?, ?, ?);
$oku->execute($data);

Dizideki veriler sırayla yer tutucuları için geçerlidir. $ data [0] ilk yer tutucuya, $ data [1] ikincisine vb... gider. Ancak, eğer dizi indeksler sıralı değilse, bu düzgün çalışmayabilir ve diziyi yeniden indekslemeniz gerekir.

Adlandırılmış Yer Tutucular

# İlk argüman adlandırılmış yer tutucu ismidir.
# Yer tutucular her zaman bir kolon ile başlar.

$oku->bindParam(':name', $name);

Burada bir diziyide ekleyebilirsiniz, ancak ilişkilendirilmiş dizi olmalıdır. Anahtarların rolü, tahmin edeceğiniz gibi, yer tutucuların isimlerini olmalıdır.

# eklediğimiz veriler
$data = ['ad'=>'Ali','email'=>'aaaa@mail.com','sehir'=>'Ankara'];  

$oku = $db->prepare("INSERT INTO test (ad,email,sehir) 
values (:ad, :email, :sehir)"); 

$oku->execute($data);

Birer isimle (:isim) ifade edilen değiştirgeli prepare örnek

$oku = $db->prepare("INSERT INTO test (ad, soyad, email) 
VALUES (:ad, :soyad, :email)");

$oku->bindParam(':ad', $ad);

$oku->bindParam(':soyad', $soyad);

$oku->bindParam(':email', $email);

$oku->execute();

SQL hatalarını almak isterseniz:

try {
$oku = $db->prepare("INSERT INTO test (ad, soyad, email) 
VALUES (:ad, :soyad, :email)");

$oku->bindParam(':ad', $ad);

$oku->bindParam(':soyad', $soyad);

$oku->bindParam(':email', $email);

$oku->execute();

} catch(Exception $e) {

  echo 'Connection failed: ' . $e->getMessage();
}

soru imi (?) ile ifade edilen değiştirgeli prepare örnek

$oku = $db->prepare("INSERT INTO test (ad, soyad, email) VALUES (?, ?, ?)");

$oku->bindParam(1, $ad);

$oku->bindParam(2, $soyad);

$oku->bindParam(3, $email);

$oku->execute();

Dizili ekleme

$oku = $db->prepare("INSERT INTO test (ad, soyad, email) VALUES (?, ?, ?)");

$oku->execute([$ad,$soyad,$email]);

Veri Güncelleme

$data = [
    'id' => $id,
    'ad' => $ad,
    'soyad' => $soyad,
    ];
$sql = "UPDATE test SET ad=:ad, soyad=:soyad WHERE id=:id";

$db->prepare($sql)->execute($data);

Bir işlemde toplu işlem yürütme


Toplu işlem yapmak oldukça kolay, proğram kodları içine PDO-> beginTransaction() ve PDO-> commit() methodlarını dahil ederek, Toplu işlemler tamamlanana kadar başka kimsenin göremeyeceğini php çekirdeğeni yazan kadro tarafından size garanti ediyorlar. Bir şeyler ters giderse, yakalama bloğu, işlem başlatıldığından beri yapılan tüm değişiklikleri geri alır ve sonra bir hata mesajı yazdırır.

Örnek:

Aşağıdaki örnek, Test adlı bir veritabanı ve Tablo1 adlı bir tabloyu kullanır. Bir işlem başlatır ve sonra iki satır eklemek ve sonra bir satırı silmek için komutlar verir. Komutlar veritabanına gönderilir ve PDO::commit işlem ile açıkça sona erdirilir .

conn = new PDO( "sqlsrv:server=(local); Database = Test", "", "");

  $conn->beginTransaction(); 

try{

$ekle = $conn->exec("insert into Table1(col1, col2) values('a', 'b') ");  
$ekle = $conn->exec("insert into Table1(col1, col2) values('a', 'c') ");  
$ekle = $conn->exec("delete from Table1 where col1 = 'a' and col2 = 'b'"); 
 
 $conn->commit();

 catch(Exception $e){
    
    echo $e->getMessage();

    //İşlemi geri al.

    $pdo->rollBack();
} 

İşlem Şartlarının Açıklaması.

Lütfen konu haricinde soru sormayın cevaplanmayacaktır. Yorumunuz onaylandıktan sonra yayınlacaktır.

905

KATEGORİ
  • HTML
  • CSS
  • PHP
  • JQUERY
  • PHOTOSHOP
  • JavaScript
  • Web Dünyası
  • Linux
POPÜLER MAKALE
  • HTML RESME LİNK VERME
  • HTML LİNK(Bağlantı)EKLEME - LİNK VERME
  • HTML YAZI VE RESİM ORTALAMA
  • HTML DİV ve SPAN NEDİR?
  • HTML FORM OLUŞTURMA
  • HTML KAYAN RESİM VE Marguee KULLANIMI
  • HTML ARKAPLANA MÜZİK EKLEME
  • CSS (BOYUT) GENİŞLİK VE YÜKSEKLİK (Width-Height)
  • HTML RESİM EKLEME
  • PHP ceil()-floor()-round() YUVARLAMA FONKSİYONU
ETİKET
WEBCEBİR © 2013 Tüm hakları saklıdır.