downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

Hareketler ve özdevinimli işlemler> <Öntanımlı Sabitler
[edit] Last updated: Fri, 23 Mar 2012

view this page in

Bağlantılar ve Bağlantı Yönetimi

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 kullanacaksınız. Veritabanı kaynağını (nam-ı diğer DSN) ve isteğe bağlı olarak kullanıcı ismini ve parolasını belirtmek için kurucuyu kullanabilirsiniz.

Örnek 1 - MySQL'e bağlanmak

<?php
$dbh 
= new PDO('mysql:host=localhost;dbname=test'$user$pass);
?>

Bir hata oluşursa bu bir PDOException istisnasına sebep olur. Hatayı ele almak için istisnayı yakalayabilir veya işi set_exception_handler() üzerinden ayarladığınız bir küresel hata işleme uygulamasına bırakabilirsiniz.

Örnek 2 - Bağlantı hatalarının ele alınışı

<?php
try {
    
$dbh = new PDO('mysql:host=localhost;dbname=test'$user$pass);
    foreach(
$dbh->query('SELECT * from FOO') as $row) {
        
print_r($row);
    }
    
$dbh null;
} catch (
PDOException $e) {
    print 
"Hata!: " $e->getMessage() . "<br/>";
    die();
}
?>

Uyarı

Uygulamanız, PDO kurucusu tarafından tetiklenen istisnayı yakalamazsa betiği sonlandırıp bir hata geri izlemesi oluşturmak için denetim öntanımlı olarak zend motoruna geçer. Bu geri izleme, kullanıcı ismi ve parola dahil veritabanı bağlantısıyla ilgili tüm ayrıntıları ortaya döker. Bu istisnayı yakalamak sizin sorumluluğunuzdadır. Bunu ya doğrudan catch deyimiyle ya da örtük olarak set_exception_handler() üzerinden yaparsınız.

Veritabanı bağlantısının başarıyla kurulmasıyla betiğinize PDO sınıfının bir örneği döner. PDO nesnesinin ömrü boyunca bağlantı etkin kalır. Bağlantıyı kapatmak için, nesneye gönderimli herşeyin silindiğinden emin olarak nesneyi yok etmeniz gerekir; bunu nesneyi tutan değişkene NULL atayarak yapabilirsiniz. Bunu siz yapmazsanız, PHP betiğiniz sonlandığında bunu sizin yerinize yapacaktır.

Örnek 3 - Bir bağlantının kapatılışı

<?php
$dbh 
= new PDO('mysql:host=localhost;dbname=test'$user$pass);
// burada bağlantıyı kullanıyoruz


// İşimiz bittiğine göre bağlantıyı kapatabiliriz.
$dbh 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 maliyetini ortadan kaldırır ve uygulamanın daha hızlı çalışmasını sağlar.

Örnek 4 - Kalıcı bağlantılar

<?php
$dbh 
= new PDO('mysql:host=localhost;dbname=test'$user$pass, array(
    
PDO::ATTR_PERSISTENT => true
));
?>

Bilginize:

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 ilklendirdikten sonra bu özelliği etkin kılmak isterseniz sürücü kalıcı bağlantıları kullanmayacaktır.

Bilginize:

PDO ODBC sürücüsünü kullanıyorsanız ve ODBC küüphaneleriniz ODBC Bağlantı Havuzlarını destekliyorsa (hem unixODBC hem de Windows bunu yapar; başkaları da olabilir) kalıcı PDO bağlantılarını kullanmanız önerilmez; bağlantı önbelleklemesini ODBC Bağlantı Havuzlama katmanına bırakmak daha iyidir. ODBC Bağlantı Havuzu bağlantıyı süreçteki diğer modüllerle paylaşır; eğer PDO bağlantıyı önbelleklemeye çalışırsa bu bağlantı asla ODBC bağlantı havuzuna dönmez ve sonuçta diğer modüllere hizmet vermek için ek bağlantılar oluşur.



add a note add a note User Contributed Notes Bağlantılar ve Bağlantı Yönetimi
alvaro at demogracia dot com 01-Jul-2011 10:07
On connection errors, the PDO constructor seems to do two things no matter your PDO::ATTR_ERRMODE setting:

1. Trigger a warning
2. Throw a PDOException

If you set the PDO::ATTR_ERRMODE parameter, it will only take effect on further operations.
jak dot spalding at gmail dot com 10-Apr-2011 12:35
Just thought I'd add in and give an explanation as to why you need to use 127.0.0.1 if you have a different port number.

The mysql libraries will automatically use Unix sockets if the host of "localhost" is used. To force TCP/IP you need to set an IP address.
ekkart at ekkart dot de 14-Oct-2010 03:43
In order to set the encoding of the database connection, use the exec function:
<?php
try {
   
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
   
$dbh->exec("SET CHARACTER SET utf8");
   
$dbh = null;
} catch (
PDOException $e) {
    print
"Error!: " . $e->getMessage() . "<br/>";
    die();
}
?>
angela 06-Apr-2010 02:53
I spent hours today trying to get my portable wamp to update a database, using localhost:800 and port 3307 for mysql. For it to work I needed to adjust the connect() instruction as described:
$dsn = "mysql:host=127.0.0.1;port=3307;dbname=mydatabase";
neville at whitespacers dot com 16-Oct-2009 03:40
To avoid exposing your connection details should you fail to remember to catch any exception thrown by the PDO constructor you can use the following class to implicitly change the exception handler temporarily.

<?php

Class SafePDO extends PDO {
 
        public static function
exception_handler($exception) {
           
// Output the exception details
           
die('Uncaught exception: ', $exception->getMessage());
        }
 
        public function
__construct($dsn, $username='', $password='', $driver_options=array()) {

           
// Temporarily change the PHP exception handler while we . . .
           
set_exception_handler(array(__CLASS__, 'exception_handler'));

           
// . . . create a PDO object
           
parent::__construct($dsn, $username, $password, $driver_options);

           
// Change the exception handler back to whatever it was before
           
restore_exception_handler();
        }

}

// Connect to the database with defined constants
$dbh = new SafePDO(PDO_DSN, PDO_USER, PDO_PASSWORD);

?>
dan dot franklin at pearson dot com 17-Apr-2008 09:37
Note that you can specify a port number with "port=####", but this port number will be ignored if the host is localhost.  If you want to connect to a local port other than the default, use host=127.0.0.1 instead of localhost.

 
show source | credits | stats | sitemap | contact | advertising | mirror sites