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
Автор:
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.
2013-05-29 08:30:36
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
Автор:
To connect to the database via a function use this and call the getConnection function in the class constructor.

<?php
class Connection{

    protected 
$db;

    public function 
Connection(){

   
$conn NULL;

        try{
           
$conn = new PDO("mysql:host=localhost;dbname=dbname""dbuser""dbpass");
           
$conn->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
            } catch(
PDOException $e){
                echo 
'ERROR: ' $e->getMessage();
                }   
           
$this->db $conn;
    }
   
    public function 
getConnection(){
        return 
$this->db;
    }
}

?>
2014-04-07 16:55:13
http://php5.kiev.ua/manual/ru/pdo.construct.html
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");
?>
2014-11-16 15:34:08
http://php5.kiev.ua/manual/ru/pdo.construct.html
If you happen to create a dsn like this...

<?php
   
//wrong dsn
   
$db = new PDO('mysql:database=yourdb;host=127.0.0.1''user''password');
   
$stmt $db->prepare('SELECT * FROM tbl WHERE id = :id');
   
$stmt->bindParam(':id'$user_idPDO::PARAM_INT);
   
$result $stmt->execute();
?>

... your result will be bool(false) and your $db->errorInfo() will be "0000" which isn't very helpful.

You have to look to the $stmt->errorInfo() to see "No database selected" which is even more confusing until you realize that it's not 'database' but 'dbname' in your DSN! You would think the error about a bad DSN would be in the $db errorInfo but it is not, it's not until you try the $stmt that the error is generated.

<?php
   
//correct dsn
   
$db = new PDO('mysql:dbname=yourdb;host=127.0.0.1''user''password');
?>

I wasted a half hour on that one.
2015-04-18 06:24:37
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
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();
    }   
?>
2015-11-23 07:37:57
http://php5.kiev.ua/manual/ru/pdo.construct.html
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)
2016-04-17 00:05:52
http://php5.kiev.ua/manual/ru/pdo.construct.html
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
2016-07-15 20:37:54
http://php5.kiev.ua/manual/ru/pdo.construct.html
Just to give an odbc string connection example to MSSQL:

$odbc="odbc:Driver={SQL Server};Server=$server;Database=$database;";

$cnx = new PDO( $odbc , $user, $password);

$sql="SELECT field FROM Quotation_Header WHERE (field> 0)";

foreach ($cnx->query($sql) as $row) {
   echo $row['field'] . "\n";
}
2017-02-24 18:10:00
http://php5.kiev.ua/manual/ru/pdo.construct.html
pdo单例模式

<?php

class PdoExt extends PDO{

    static protected 
$_instance;

    protected function 
__construct($dsn$username$password){
        return 
parent::__construct($dsn$username$password);
    }

    static public function 
getInstance($dsn$username$password){
        if(!isset(
self::$_instance)){
           
self::$_instance = new self($dsn$username$password);
        }
        return 
self::$_instance;
    }

}

$dsn "mysql:host=localhost";
$username "root";
$password "root";

$pdo PdoExt::getInstance($dsn$username$password);
$sql "SELECT user,host FROM mysql.user WHERE user = :user";
$statement $pdo->prepare($sql);

$username 'root';
$statement->bindParam(':user'$username);
$statement->execute();
$users $statement->fetchAll(2);
print_r($users);
2017-12-16 03:35:47
http://php5.kiev.ua/manual/ru/pdo.construct.html

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