- Katılım
- 2 Mar 2015
- Konular
- 59,189
- Mesajlar
- 88,439
- Çözüm
- 109
- Online süresi
- 4mo 16d
- Reaksiyon Skoru
- 14,280
- Altın Konu
- 2,398
- TM Yaşı
- 11 Yıl 3 Ay 6 Gün
- Başarım Puanı
- 1,051
- MmoLira
- 695,092
- DevLira
- 234
ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!
PDO, PHP Veri Nesneleri için kullanılan bir kısaltmadır. PHP, ilişkisel ve NOSQL veritabanlarının çoğuyla etkileşime girebilir. Varsayılan PHP kurulumu, satıcıya özgü veritabanı uzantılarıyla birlikte gelir ve bunlar zaten kurulu ve etkinleştirilmiştir. MySQL için mysqli uzantısı gibi belirli bir veritabanı türüne özgü veritabanı sürücülerine ek olarak, PHP ayrıca PDO ve ODBC gibi soyutlama katmanlarını da destekler.
PDO uzantısı, PHP'de veritabanlarına erişim için hafif ve tutarlı bir arayüz tanımlar. Her satıcıya özgü uzantının işlevselliği diğerinden farklıdır. Sonuç olarak, belirli bir PHP uygulamasının arka uç veritabanını değiştirmeyi düşünüyorsanız, örneğin PostGreSql'den MySQL'e, kodda çok sayıda değişiklik yapmanız gerekir. Öte yandan PDO API, kullanılacak yeni veritabanının URL'sini ve kimlik bilgilerini belirtmek dışında herhangi bir değişiklik gerektirmez.
Mevcut PHP kurulumunuzun çalışabilmesi için ilgili PDO sürücüsünün mevcut olması gerekir. Şu anda aşağıdaki veritabanları ilgili PDO arayüzleriyle desteklenmektedir:
Varsayılan olarak, PDO_SQLITE sürücüsü php.ini ayarlarında etkindir, bu nedenle bir MySQL veritabanıyla PDO aracılığıyla etkileşim kurmak istiyorsanız, aşağıdaki satırın başındaki noktalı virgülü kaldırarak yorum satırı olmaktan çıkarıldığından emin olun.
Mevcut PDO sürücülerinin listesini PDO sınıfındaki PDO::getAvailableDrivers() statik fonksiyonunu çağırarak elde edebilirsiniz.
Aşağıdaki kod parçacığı MySQL veritabanıyla bağlantı kurmanın tipik bir yoludur:
Herhangi bir bağlantı hatası olması durumunda PDOException nesnesi fırlatılacaktır.
Aşağıdaki çıktıyı üretecektir:
Hata durumunda:
Bu yöntem otomatik onaylama modunu kapatır. Bu nedenle, veritabanında kalıcı değişiklikler yapmak için commit() yöntemini çağırmanız gerekir. rollBack()'i çağırmak, veritabanındaki tüm değişiklikleri geri alır ve bağlantıyı otomatik onaylama moduna döndürür. Bu yöntem başarılı olduğunda true, başarısız olduğunda false döndürür.
BeginTransaction otomatik onaylama modunu devre dışı bıraktığından, bu yöntemi bir işlemden sonra çağırmalısınız. Bir işlemi onaylar ve PDO::beginTransaction()'a yapılan bir sonraki çağrı yeni bir işlem başlatana kadar veritabanı bağlantısını otomatik onaylama moduna döndürür. Bu yöntem başarılı olduğunda true, başarısız olduğunda false döndürür.
exec() metodu, tek bir fonksiyon çağrısında bir SQL ifadesini yürütür ve ifadeden etkilenen satır sayısını döndürür.
SELECT ifadesinden sonuç döndürmediğini unutmayın. Programınız sırasında yalnızca bir kez yürütülecek bir SELECT ifadeniz varsa, PDO::query()'yi yayınlamayı düşünün.
Öte yandan birden fazla kez çalıştırmanız gereken bir ifade için PDO :: prepare()() ile bir PDOStatement nesnesi hazırlayın ve PDOStatement::execute() ile ifadeyi çalıştırın.
exec() yönteminin hazırlanması ve yürütülmesi için bir SQL ifadesini temsil eden bir dize parametresine ihtiyacı vardır ve verdiğiniz SQL ifadesi tarafından değiştirilen veya silinen satır sayısını döndürür. Hiçbir satır etkilenmediyse, PDO::exec() 0 döndürür.
Bu yöntem, tek bir fonksiyon çağrısında bir SQL ifadesini hazırlar ve yürütür ve ifadeyi bir PDOStatement nesnesi olarak döndürür.
Veritabanı otomatik onaylama moduna ayarlanmışsa, bu fonksiyon işlemi geri aldıktan sonra otomatik onaylama modunu geri yükleyecektir.
MySQL dahil bazı veritabanlarının, bir işlem içinde DROP TABLE veya CREATE TABLE gibi bir DDL ifadesi yayınlandığında otomatik olarak örtük bir COMMIT yayınladığını ve dolayısıyla işlem sınırları içindeki diğer değişiklikleri geri almanızı engelleyeceğini unutmayın. Bu yöntem başarılı olduğunda true, başarısız olduğunda false döndürür.
PDO uzantısı, PHP'de veritabanlarına erişim için hafif ve tutarlı bir arayüz tanımlar. Her satıcıya özgü uzantının işlevselliği diğerinden farklıdır. Sonuç olarak, belirli bir PHP uygulamasının arka uç veritabanını değiştirmeyi düşünüyorsanız, örneğin PostGreSql'den MySQL'e, kodda çok sayıda değişiklik yapmanız gerekir. Öte yandan PDO API, kullanılacak yeni veritabanının URL'sini ve kimlik bilgilerini belirtmek dışında herhangi bir değişiklik gerektirmez.
Mevcut PHP kurulumunuzun çalışabilmesi için ilgili PDO sürücüsünün mevcut olması gerekir. Şu anda aşağıdaki veritabanları ilgili PDO arayüzleriyle desteklenmektedir:
| Sürücü Adı | Desteklenen Veritabanları |
|---|---|
| PDO_CUBRID | Kübik |
| PDO_DBLIB | FreeTDS / Microsoft SQL Server / Sybase |
| PDO_FIREBIRD | Ateş kuşu |
| PDO_IBM | IBM DB2 |
| PDO_INFORMIX | IBM Informix Dinamik Sunucusu |
| PDO_MYSQL | MySQL 3.x/4.x/5.x/8.x |
| PDO_OCI | Oracle Çağrı Arayüzü |
| PDO_ODBC | ODBC v3 (IBM DB2, unixODBC ve win32 ODBC) |
| PDO_PGSQL | PostgreSQL |
| PDO_SQLITE | SQLite 3 ve SQLite 2 |
| PDO_SQLSRV | Microsoft SQL Server / SQL Azure |
Varsayılan olarak, PDO_SQLITE sürücüsü php.ini ayarlarında etkindir, bu nedenle bir MySQL veritabanıyla PDO aracılığıyla etkileşim kurmak istiyorsanız, aşağıdaki satırın başındaki noktalı virgülü kaldırarak yorum satırı olmaktan çıkarıldığından emin olun.
extension=pdo_mysql
Mevcut PDO sürücülerinin listesini PDO sınıfındaki PDO::getAvailableDrivers() statik fonksiyonunu çağırarak elde edebilirsiniz.
PDO Bağlantısı
PDO temel sınıfının bir örneği bir veritabanı bağlantısını temsil eder. Oluşturucu, veritabanı kaynağını (DSN olarak bilinir) ve isteğe bağlı olarak kullanıcı adı ve parolayı (varsa) belirtmek için parametreleri kabul eder.Aşağıdaki kod parçacığı MySQL veritabanıyla bağlantı kurmanın tipik bir yoludur:
PHP:
<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
?>
Herhangi bir bağlantı hatası olması durumunda PDOException nesnesi fırlatılacaktır.
Örnek
Aşağıdaki örneğe bir göz atın:
PHP:
<?php
$dsn="localhost";
$dbName="myDB";
$username="root";
$password="";
try{
$dbConn= new PDO("mysql:host=$dsn;dbname=$dbName",$username,$password);
Echo "Successfully connected with $dbName database";
} catch(Exception $e){
echo "Connection failed" . $e->getMessage();
}
?>
Aşağıdaki çıktıyı üretecektir:
Successfully connected with myDB database
Hata durumunda:
Connection failedSQLSTATE[HY000] [1049] Unknown database 'mydb'
PDO Sınıf Yöntemleri
PDO sınıfı aşağıdaki statik yöntemleri tanımlar:PDO::beginTransaction
Bağlantı nesnesini elde ettikten sonra, bir işlemi başlatmak için bu metodu çağırmalısınız.public PDO::beginTransaction(): bool
Bu yöntem otomatik onaylama modunu kapatır. Bu nedenle, veritabanında kalıcı değişiklikler yapmak için commit() yöntemini çağırmanız gerekir. rollBack()'i çağırmak, veritabanındaki tüm değişiklikleri geri alır ve bağlantıyı otomatik onaylama moduna döndürür. Bu yöntem başarılı olduğunda true, başarısız olduğunda false döndürür.
PDO::commit
commit() metodu bir işlemi kaydeder.public PDO::commit(): bool
BeginTransaction otomatik onaylama modunu devre dışı bıraktığından, bu yöntemi bir işlemden sonra çağırmalısınız. Bir işlemi onaylar ve PDO::beginTransaction()'a yapılan bir sonraki çağrı yeni bir işlem başlatana kadar veritabanı bağlantısını otomatik onaylama moduna döndürür. Bu yöntem başarılı olduğunda true, başarısız olduğunda false döndürür.
PDO::exec
exec() yöntemi bir SQL ifadesini yürütür ve etkilenen satır sayısını döndürür.public PDO::exec(string $statement): int|false
exec() metodu, tek bir fonksiyon çağrısında bir SQL ifadesini yürütür ve ifadeden etkilenen satır sayısını döndürür.
SELECT ifadesinden sonuç döndürmediğini unutmayın. Programınız sırasında yalnızca bir kez yürütülecek bir SELECT ifadeniz varsa, PDO::query()'yi yayınlamayı düşünün.
Öte yandan birden fazla kez çalıştırmanız gereken bir ifade için PDO :: prepare()() ile bir PDOStatement nesnesi hazırlayın ve PDOStatement::execute() ile ifadeyi çalıştırın.
exec() yönteminin hazırlanması ve yürütülmesi için bir SQL ifadesini temsil eden bir dize parametresine ihtiyacı vardır ve verdiğiniz SQL ifadesi tarafından değiştirilen veya silinen satır sayısını döndürür. Hiçbir satır etkilenmediyse, PDO::exec() 0 döndürür.
PDO::query
query() yöntemi, yer tutucular olmadan bir SQL ifadesi hazırlar ve yürütür.public PDO::query(string $query, ?int $fetchMode = null): PDOStatement|false
Bu yöntem, tek bir fonksiyon çağrısında bir SQL ifadesini hazırlar ve yürütür ve ifadeyi bir PDOStatement nesnesi olarak döndürür.
PDO::rollBack
rollback() metodu, PDO::beginTransaction() tarafından başlatılan bir işlemi geri alır.public PDO::rollBack(): bool
Veritabanı otomatik onaylama moduna ayarlanmışsa, bu fonksiyon işlemi geri aldıktan sonra otomatik onaylama modunu geri yükleyecektir.
MySQL dahil bazı veritabanlarının, bir işlem içinde DROP TABLE veya CREATE TABLE gibi bir DDL ifadesi yayınlandığında otomatik olarak örtük bir COMMIT yayınladığını ve dolayısıyla işlem sınırları içindeki diğer değişiklikleri geri almanızı engelleyeceğini unutmayın. Bu yöntem başarılı olduğunda true, başarısız olduğunda false döndürür.
Örnek
Aşağıdaki kod MySQL sunucusundaki myDB veritabanında bir öğrenci tablosu oluşturur.
PHP:
<?php
$dsn="localhost";
$dbName="myDB";
$username="root";
$password="";
try{
$conn= new PDO("mysql:host=$dsn;dbname=$dbName",$username,$password);
Echo "Successfully connected with $dbName database";
$qry = <<<STRING
CREATE TABLE IF NOT EXISTS STUDENT (
student_id INT AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
marks INTEGER(3),
PRIMARY KEY (student_id)
);
STRING;
echo $qry . PHP_EOL;
$conn->exec($qry);
$conn->commit();
echo "Table created\n";
}
catch(Exception $e){
echo "Connection failed : " . $e->getMessage();
}
?>
Örnek
Yukarıdaki örnekte oluşturulan öğrenci tablosuna yeni bir kayıt eklemek için aşağıdaki kodu kullanın:
PHP:
<?php
$dsn="localhost";
$dbName="myDB";
$username="root";
$password="";
try {
$conn= new PDO("mysql:host=$dsn;dbname=$dbName",$username,$password);
echo "Successfully connected with $dbName database";
$sql = "INSERT INTO STUDENT values(1, 'Raju', 60)";
$conn->exec($sql);
$conn->commit();
echo "A record inserted\n";
} catch(Exception $e){
echo "Connection failed : " . $e->getMessage();
}
?>
Örnek
Aşağıdaki PHP betiği öğrenci tablosundaki tüm kayıtları getirir:
PHP:
<?php
$dsn="localhost";
$dbName="myDB";
$username="root";
$password="";
try {
$conn= new PDO("mysql:host=$dsn;dbname=$dbName",$username,$password);
echo "Successfully connected with $dbName database";
$sql = "SELECT * from student";
$statement = $conn->query($sql);
$rows = $statement->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $row) {
var_dump($row);
}
} catch(Exception $e){
echo "Connection failed : " . $e->getMessage();
}
?>

