PDO::__construct

(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)

PDO::__construct Создает экземпляр PDO, предоставляющий соединение с базой данных

Описание

PDO::__construct ( string $dsn [, string $username [, string $password [, array $driver_options ]]] )

Создает экземпляр PDO, предоставляющий подключение к необходимой базе данных.

Список параметров

dsn

Имя источника данных или DSN, содержащее информацию, необходимую для подключения к базе данных.

В общем, DSN состоит из имени драйвера PDO, за которым следует двоеточие и специфический синтаксис подключения драйвера PDO. Дополнительную информацию можно получить из раздела Документация по специфическим драйверам PDO.

Параметр dsn поддерживает три разные метода указания аргументов, необходимых для создания соединения с базой данных:

Вызов драйвера

dsn содержит полный DSN.

Вызов URI

Параметр dsn состоит из строки uri: с последующим URI, который определяет расположение файла, содержащего строку DSN. URI может указывать на локальный файл или удаленный URL.

uri:file:///path/to/dsnfile

Совмещение имен

dsn состоит из имени name, которое соответствует параметру pdo.dsn.name в php.ini, определяющему строку DSN.

Замечание:

Псевдоним должен быть определен в php.ini, но не в .htaccess или httpd.conf

username

Имя пользователя для строки DSN. Этот параметр опционален для некоторых драйверов PDO.

password

Пароль для строки DSN. Этот параметр опционален для некоторых драйверов PDO.

driver_options

Массив специфичных для драйвера настроек подключения ключ=>значение.

Возвращаемые значения

Возвращает объект PDO в случае успеха.

Ошибки

PDO::__construct() выбрасывает исключение PDOException, если попытка соединения с необходимой базой данных не удается.

Примеры

Пример #1 Создание экземпляра PDO через вызов драйвера

<?php
/* Подключение к базе данных ODBC, используя вызов драйвера */
$dsn 'mysql:dbname=testdb;host=127.0.0.1';
$user 'dbuser';
$password 'dbpass';

try {
    
$dbh = new PDO($dsn$user$password);
} catch (
PDOException $e) {
    echo 
'Подключение не удалось: ' $e->getMessage();
}

?>

Пример #2 Создание экземпляра PDO через вызов URI

В следующем примере предполагается, что файл /usr/local/dbconnect существует с правами доступа, которые позволяют PHP прочитать файл. Файл содержит PDO DSN для подключения к базе данных DB2 через драйвер PDO_ODBC:

odbc:DSN=SAMPLE;UID=john;PWD=mypass

PHP-скрипт может создать подключение к базе данных путем простой передачи параметра uri:, указывающим на на файл URI:

<?php
/* Подключение к базе данных ODBC, используя вызов драйвера */
$dsn 'uri:file:///usr/local/dbconnect';
$user '';
$password '';

try {
    
$dbh = new PDO($dsn$user$password);
} catch (
PDOException $e) {
    echo 
'Подключение не удалось: ' $e->getMessage();
}

?>

Пример #3 Создание экземпляра PDO, используя псевдоним

В следующем примере предполагается, что php.ini содержит следующую запись, позволяющую подключение к базе данных MySQL, используя только псевдонимmydb:

[PDO]
pdo.dsn.mydb="mysql:dbname=testdb;host=localhost"
<?php
/* Подключение к базе данных ODBC, используя псевдоним */
$dsn 'mydb';
$user '';
$password '';

try {
    
$dbh = new PDO($dsn$user$password);
} catch (
PDOException $e) {
    echo 
'Подключение не удалось: ' $e->getMessage();
}

?>

Коментарии

To specify a database connection port use the following DSN string

<?php
$dsn 
'mysql:dbname=testdb;host=127.0.0.1;port=3333';
?>
2008-11-25 16:03:45
http://php5.kiev.ua/manual/ru/pdo.construct.html
Автор:
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\''));
?>
2010-02-20 11:34:41
http://php5.kiev.ua/manual/ru/pdo.construct.html
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.
2010-09-15 03:19:33
http://php5.kiev.ua/manual/ru/pdo.construct.html
To get UTF-8 charset you can specify that in the DSN.

$link = new PDO("mysql:host=localhost;dbname=DB;charset=UTF8");
2013-10-19 21:46:08
http://php5.kiev.ua/manual/ru/pdo.construct.html
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.
2015-11-09 02:43:41
http://php5.kiev.ua/manual/ru/pdo.construct.html
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);
2020-04-27 11:16:38
http://php5.kiev.ua/manual/ru/pdo.construct.html
Автор:
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
2020-08-20 16:34:31
http://php5.kiev.ua/manual/ru/pdo.construct.html
Автор:
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);
    }
}
?>
2022-12-13 14:26:32
http://php5.kiev.ua/manual/ru/pdo.construct.html
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"
2023-01-30 12:27:02
http://php5.kiev.ua/manual/ru/pdo.construct.html

    Поддержать сайт на родительском проекте КГБ