To get UTF-8 charset you can specify that in the DSN.
$link = new PDO("mysql:host=localhost;dbname=DB;charset=UTF8");
(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)
PDO::__construct — Bir veritabanı bağlantısını temsil eden bir PDO nesnesi oluşturur
$dsn
, string|null $kullanıcı
= null
, string|null $parola
= null
, array|null $seçenekler
= null
)Belirtilen veritabanına kurulan bağlantıyı temsil eden bir PDO nesnesi oluşturur.
Veritabanına bağlantı için gerekli bilgiyi içeren veri kaynağının ismi.
Genellikle bir veri kaynağı ismi, aralarında bir noktalı virgül bulunan sürücü ismi ile PDO sürücüsüne özgü bağlantı sözdiziminden oluşur. Bu konuda daha ayrıntılı bilgiyi PDO Sürücüleri sayfasında bulabilirsiniz.
dsn
değiştirgesi, bir veritabanı bağlantısı oluşturmak için gereken üç farklı yöntemi destekler:
dsn
değiştirgesi, veri kaynağı ismi için
gereken herşeyi içerir.
dsn
değiştirgesi,
uri:
sözcüğünü takibeden, veri kaynağı isim
dizgesini içeren bir dosyanın yerini belirten bir özkaynak
betimleyicisi içerir.
uri:file:///bir/yol/dsndosyası
dsn
değiştirgesi, php.ini içinde DSN
dizgesini tanımlayan
pdo.dsn.
ile eşleşen
isim
isim
adını içerir.
Bilginize:
Takma ad, .htaccess veya httpd.conf dosyasında değil php.ini dosyasında tanımlanmış olmalıdır.
DSN dizgesi için kullanıcı ismi. Bu değiştirgenin belirtilmesi bazı PDO sürücüleri için isteğe bağlıdır.
DSN dizgesi için parola. Bu değiştirgenin belirtilmesi bazı PDO sürücüleri için isteğe bağlıdır.
Sürücüye özgü bağlantı seçeneklerini içeren bir isim=>değer çiftleri dizisi.
Başarı durumunda bir PDO nesnesi döner.
PDO::__construct(), istenen veritabanına bağlantı
sağlanamazsa, o an hangi PDO::ATTR_ERRMODE
geçerli
bakmaksızın, bir PDOException yavrulanır.
Örnek 1 - Sürücü isteğiyle PDO örneğinin oluşturulması
<?php
/* Sürücü isteğiyle bir MySQL veritabanına bağlanalım */
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
$dbh = new PDO($dsn, $user, $password);
?>
Örnek 2 - URI isteğiyle PDO örneğinin oluşturulması
Aşağıdaki örnekte PHP'nin /usr/local/dbconnect dosyasını okuma iznine sahip olduğu varsayılmıştır. Dosya, PDO_ODBC sürücüsü üzerinden bir DB2 veritabanına bağlanmak için gereken şu bilgiyi içermektedir:
odbc:DSN=SAMPLE;UID=birey;PWD=parola
Bu dosyanın yerini içeren bir uri:
dizgesi ile
veritabanı bağlantısı oluşturulabilir:
<?php
/* URI isteğiyle bir ODBC veritabanına bağlanalım */
$dsn = 'uri:file:///usr/local/dbconnect';
$user = '';
$password = '';
$dbh = new PDO($dsn, $user, $password);
?>
Örnek 3 - Bir takma ad kullanarak PDO örneğinin oluşturulması
Aşağıdaki örnekte, php.ini dosyasının bir MySQL veritabanına bağlantı
kurmak için mydb
adını takma ad olarak kullamayı
mümkün kılan şöyle bir girdi içerdiği varsayılmıştır:
[PDO] pdo.dsn.mydb="mysql:dbname=testdb;host=localhost"
<?php
/* Bir takma ad kullanarak bir ODBC veritabanına bağlanalım */
$dsn = 'mydb';
$user = '';
$password = '';
$dbh = new PDO($dsn, $user, $password);
?>
To get UTF-8 charset you can specify that in the DSN.
$link = new PDO("mysql:host=localhost;dbname=DB;charset=UTF8");
Most of the information in the comment here is outdated or wrong.
You do can use host=localhost to connect via socket, which is faster than TCP, so setting 127.0.0.1 is a performance loss.
To use proper utf you should use utf8mb4, for example:
$db = new PDO('mysql:host=' . DATABASE_HOST . ';dbname='. DATABASE_NAME .';charset=utf8mb4', DATABASE_USER, DATABASE_PASSWORD);
To connect throught unix socket you need to use
<?php
$dsn = 'mysql:dbname=testdb;unix_socket=/path/to/socket';
?>
You musn't specify host when using socket.
To specify a database connection port use the following DSN string
<?php
$dsn = 'mysql:dbname=testdb;host=127.0.0.1;port=3333';
?>
I'd like to point out that in PHP 7.0 in the dsn parameter you can't use 'host=localhost' to solve this you can use 'host=127.0.0.1' instead.
When trying to connect to a local database, it seems "uri:file:///" is no longer needed. Just write the PDO pilot name followed by the absolute path of the file.
Example : sqlite:C:\VirtualHosts\phpliteadmin\dbs\surveillance_logeas.s3DB
If you use the UTF-8 encoding, you have to use the fourth parameter :
<?php
$db = new PDO('mysql:host=myhost;dbname=mydb', 'login', 'password', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
?>
Sqlite:
<?php
try{
$pdo = new PDO('sqlite:example.db');
}catch (PDOException $e){
die ('DB Error');
}
?>
If 'example.db' does not exist, no exception is thrown but the file 'example.db' is created.
You will get a fatal error if you don't catch the exception threw by PDO when it fails to connect to the database server like this.
Fatal error: in xxx.php on line xx
This error neither can be handled by error handlers nor can it be erased by the @ sign, which can make your script uncontrollable.
<?php
$db = new pdo('mysql:host=127.0.0.1;port=3306;dbname=mysql;charset=utf8','user','password',array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
));
?>
You should always try ... catch ...
<?php
try{
$db = new pdo('mysql:host=127.0.0.1;port=3306;dbname=mysql;charset=utf8','user','password',array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
));
}catch(PDOException $pe){
echo $pe->getMessage();
}
?>
Although not explicitly stated, parameters in the PDO $dsn string may be case-sensitive on some platforms or drivers.
<?php
// The dbname will not be parsed with incorrect casing:
$pdo = new PDO("mysql:host=hostname;DBName=database", "user", "password");
// The correct dbname is lowercase, as displayed in the manual:
$pdo = new PDO("mysql:host=hostname;dbname=database", "user", "password");
?>
For IBM i / iSeries / AS400 DB2 connections, you can specify system naming and library lists for php_pdo modules > 1.3.3-sg2
<?php
$pdo = new PDO(
'ibm:' . $host,
$user,
$password,
array(
PDO::I5_ATTR_DBC_SYS_NAMING => true,
PDO::I5_ATTR_DBC_LIBL => "QGPL QSYS"
)
);
?>
See http://yips.idevcloud.com/wiki/index.php/XMLSERVICE/PHPPDOChangeLog
The PDO connection is case-sensitive, this means that you cannot write
`$PDO = new PDO("MySQL:DBName=dbname;host=localhost");`
You would have to write it
`$PDO = new PDO("mysql:dbname=dbname;host=localhost");`
The difference here is that `mysql` and `dbname` is with all lower-case.
Some IDE's like PHPStorm will show a `TYPO ERROR`, at `dbname` if it's written with lower-case only, this is just to be ignored and have been reported to PHPStorm for them to fix. (Currrent version 10.0.2)