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
,$kullanıcı
= null
,$parola
= null
,$seçenekler
= null
Belirtilen veritabanına kurulan bağlantıyı temsil eden bir PDO nesnesi oluşturur.
dsn
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
bağımsız değişkeni, bir veritabanı bağlantısı oluşturmak için gereken üç farklı yöntemi destekler:
dsn
bağımsız değişkeni, veri kaynağı ismi için
gereken herşeyi içerir.
dsn
bağımsız değişkeni,
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
bağımsız değişkeni, 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.
kullanıcı
DSN dizgesi için kullanıcı ismi. Bu bağımsız değişkenin belirtilmesi bazı PDO sürücüleri için isteğe bağlıdır.
parola
DSN dizgesi için parola. Bu bağımsız değişkenin belirtilmesi bazı PDO sürücüleri için isteğe bağlıdır.
seçenekler
Sürücüye özgü bağlantı seçeneklerini içeren bir isim=>değer çiftleri dizisi.
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
$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
$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
$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");
To specify a database connection port use the following DSN string
<?php
$dsn = 'mysql:dbname=testdb;host=127.0.0.1;port=3333';
?>
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
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.
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.
A generic pattern to connect to a mariadb or mysql database using a settings file
<?php
$_SETTINGS = parse_ini_file('./settings.ini', true);
$db = new \PDO(
"mysql:hostname={$_SETTINGS['db']['host']};dbname={$_SETTINGS['db']['name']}",
$_SETTINGS['db']['user'],
$_SETTINGS['db']['pass'],
[
\PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
\PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8mb4'"
]
);
?>
You might not need the options depicted here but I find them convenient.
Works with a settings.ini file containing for instance:
[db]
host = "localhost"
name = "dbname"
user = "dbuser"
pass = "dbpassword"
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);
If you override PDO with own class and you want to implement alias from php.ini, you have to get it with `get_cfg_var` instead of `ini_get`.
<?php
class PDO extends \PDO
{
public function __construct(string $dsn, ?string $username = null, ?string $password = null, ?array $options = null)
{
//alias
if (!str_contains($dsn, ':')) {
$dsn = get_cfg_var('pdo.dsn.' . $dsn);
if (!$dsn) {
throw new PDOException('Argument #1 ($dsn) must be a valid data source name');
}
}
// your additional logic
parent::__construct($dsn, $username, $password, $options);
}
}
?>