>> PHP Data Object (PDO)

4 Aralık 2010 Cumartesi

PHP Data Object (PDO)

Başlıktan anlaşılacağı gibi konumuz PDO yani PHP Data Object , kısaca nedir manual sayfasından bir özetlemek gerekirse :

PHP Veri Nesneleri (PDO) eklentisi, PHP'deki veritabanlarına erişmek için hafif ve tutarlı bir arayüz tanımlar. PDO arayüzü tanımı bulunan her veritabanı sürücüsü, veritabanına özgü özellikleri sıradan eklenti işlevleri olarak ifade edebilir

Başlangıç için bu kadar bilgi yeterli değilse buradan manual sayfasındaki dokümanlara göz atabilirsiniz.

PHP 5 + sürümleri ile uyumluluk göstermektedir, desteklediği veritabanları şunlardır

  • DBLIB: FreeTDS / Microsoft SQL Server / Sybase

  • Firebird (http://firebird.sourceforge.net/): Firebird/Interbase 6

  • IBM (IBM DB2)

  • INFORMIX - IBM Informix Dynamic Server

  • MYSQL (http://www.mysql.com/): MySQL 3.x/4.0

  • OCI (http://www.oracle.com): Oracle Call Interface

  • ODBC: ODBC v3 (IBM DB2 and unixODBC)

  • PGSQL (http://www.postgresql.org/): PostgreSQL

  • SQLITE (http://sqlite.org/): SQLite 3.x


Local serverinizde phpinfo() fonksiyonumuzu çalıştıralım ve PDO eklentisinin aktif olup olmadığını görelim.

pdo_mysql kelimesini arama yapın uygun sonuç varsa işlem yapmamıza gerek yok , eğer yoksa php.ini dosyamızda birkaç değişiklik yapacağız.

Mysql için eklenti kodumuz

[PHP_PDO]
extension=php_pdo.dll
[PHP_MYSQL]
extension=php_mysql.dll

desteklediği diğer veritabanları için php.ini dosyamıza eklenecek kodlarımız
extension=php_pdo.dll
extension=php_pdo_firebird.dll
extension=php_pdo_informix.dll
extension=php_pdo_mssql.dll
extension=php_pdo_mysql.dll
extension=php_pdo_oci.dll
extension=php_pdo_oci8.dll
extension=php_pdo_odbc.dll
extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll


Hangi driverlerimiz aktif onu görelim
PDO::getAvailableDrivers() statik metodumuz ile kontrol edelim

[cc lang="php"]
foreach(PDO::getAvailableDrivers() as $driver)
{
echo $driver.'
';
}
?>
[/cc]

database driverleri default konumdaysa muhtemelen sonuç şu şekil olmalı


  • mysql


  • sqlite


  • sqlite2




Örnek Mysql veritabanımıza bağlanalım
[cc lang="php"]
try {
$db = new PDO("mysql:dbname=test;host=localhost", "user", "pass" );
echo "PDO connection!";
}
catch(PDOException $e)
{
echo $e->getMessage();
}
?>
[/cc]

Herhangi problem yoksa PDO connection! mesajını göreceksiniz.

Örnek PostgreSQL veritabanımıza bağlanalım
[cc lang="php"]
try {
$db = new PDO("pgsql:dbname=test;host=localhost", "user", "pass" );
echo "PDO connection!";
}
catch(PDOException $e)
{
echo $e->getMessage();
}
?>
[/cc]

Örnek SQLite veritabanımıza bağlanalım
[cc lang="php"]
try {
$db = new PDO("sqlite:/path/to/database.sdb");
}
catch(PDOException $e)
{
echo $e->getMessage();
}
?>
[/cc]




Bağlantı kodumuzda try ve catch bloğumuz içerisine yazdığımız bağlantı kodumuz hata olasılığında catch kısmı devreye girecektir.
Çalışmamızı try kod bloğunun içinde yapmamız daha temiz olacaktır.

Tüm veritabanlarını listeleyelim

[cc lang="php"]
foreach ($db->query('SHOW DATABASES') as $row) {
print_r($row);
}
[/cc]

Insert
[cc lang="php"]
$db->exec("INSERT INTO cms(name, languages) VALUES ('wordpress', 'PHP')");
[/cc]

Select
[cc lang="php"]
$sql = "SELECT * FROM cms";
foreach ($db->query($sql) as $row)
{
echo $row['name'].' : '.$row['languages'].'
';
}
[/cc]

Update

[cc lang="php"]
$db->exec("UPDATE cms SET name='habari' WHERE languages='PHP'");
[/cc]

Daha detaylı bilgi isterseniz php.net manual veya buradan ulaşabilirsiniz.

Bu İçeriğe Ulaşmak için Arama Motorlarında Şu Şekilde Arama Yapıyorlar :
PHP Data Object (PDO),

5 Oğuz KOÇ: PHP Data Object (PDO) Başlıktan anlaşılacağı gibi konumuz PDO yani PHP Data Object , kısaca nedir manual sayfasından bir özetlemek gerekirse : PHP Veri Nesneleri ...

18 yorum:

  1. Güzel bir yazı olmuş ellerinize saglık

    YanıtlaSil
  2. Emeğinize Sağlık Cok Güzel Bi Anlatım Olmuş.

    YanıtlaSil
  3. hocam güzel bir anlatım saolun :)

    YanıtlaSil
  4. elinize sağlık güzel yazı olmus. birşey daha sormak istiyorum konuyla alakalı değil ama php konusunda başlangıç için düzgün bir kitap önerebilirmisiniz. yada görsel eğitim mi daha iyi olur sizce. ilginiz için tşkler.g

    YanıtlaSil
  5. Merhaba , başlangıc kitabı olarak rıza çelik a'dan z'ye php kitabını tavsiye ederim.
    http://adanzyephp.com

    YanıtlaSil
  6. Merhaba hocam, Güzel bir yazı olmuş. Bu arayüz sizde ne kadar güvenli ?

    YanıtlaSil
  7. Merhaba, hangi ara yüzden bahsediyorsunuz

    YanıtlaSil
  8. Bu PDO yu kastediyorum usta

    YanıtlaSil
  9. Mysqli mi yoksa PDO kullanmayı mı tavsiye edersiniz?

    YanıtlaSil
  10. PDO kullanmanızı tavsiye ederim, kolay gelsin

    YanıtlaSil
  11. sayın hocam verdiğiniz kodların bir kısmını denedim ancak bir yerde sorun almaya başladım

    <?php
    foreach(PDO::getAvailableDrivers() as $driver)
    {
    echo $driver.'';
    }
    ?>

    getMessage();
    }
    ?>

    getMessage();
    }
    ?>

    getMessage();
    }
    ?>



    ( şifre ve veri tabanı bilgilerimi burada değiştirdim )

    sonuçun şöle bir çıktısı oldu


    sqlite
    sqlite2
    mysql

    PDO connection!
    could not find driver
    SQLSTATE[HY000] [14] unable to open database file


    buradaki sorun nedir acaba

    YanıtlaSil
  12. Merhaba, kullandığınız yerel sunucu veya eklenti yolları ile alakalı bir durum olabilir, wamp server de yapar bu durumu

    YanıtlaSil
  13. Mysql injection için herhangi bir önlem almamıza gerek var mı ?

    YanıtlaSil
  14. Ek olarak tek sonuç döndüren sorgularda aşağıdaki kullanım dışında bir kullanım var mıdır ?


    $sorgu=$db->query("select isim,soyisim,dogum from ogrenciler where kimlik='$kimlik'");
    foreach($sorgu as $s){

    }

    Buradan tek bir öğrenciye ait bilgiler dönüyor ben bunu döngü olarak değilde istediğim gibi bir dizinin değişkenleri şeklinde html kodlarının farklı farklı yerlerinde kullanmak istiyorum.Yukarıdaki gibi kullanım $s dizisine dönen sonucu atıyor ama bana pek kullanışlı gibi gelmedi.

    Daha basit bir kullanımı var mıdır ?

    YanıtlaSil
  15. Merhaba PDO ;) Tesekkurler hocam

    YanıtlaSil
  16. ip adres : 123.12.15.12
    vt adı: ornek.FDB
    localdeki yeri : D:\ornek\ornek.FDB
    port :3050
    sorgu türü :PDO

    yukarıdaki bilgilerle nasıl sorgu oluşturabilrim ip ile bağlanamıyorum

    YanıtlaSil
  17. Merhaba, sunucu yetkilinizden veritabanı bağlantı adresini alınız.

    YanıtlaSil
  18. sunucuyla alakalı değil netten kendi billgisayarıma bağlanacağım. verdiğim ip adresim kendi bilgisayarımın ip adresi

    $yenidb= new PDO('firebird:dbname=".$db";port=".$port.";host=".$adres.";charset=UTF8',$kadi,$sifre);

    böyle bir sorgum var ama bağlanamıyorum nerede hata yapıyorum bilmiyorum. yardımcı olursanız sevinirim...

    YanıtlaSil

< >