(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)
PDO::__construct — 创建一个表示数据库连接的 PDO 实例
$dsn
[, string $username
[, string $password
[, array $driver_options
]]] )创建一个表示连接到请求数据库的数据库连接 PDO 实例。
数据源名称或叫做 DSN,包含了请求连接到数据库的信息。
通常,一个 DSN 由 PDO 驱动名、紧随其后的冒号、以及具体 PDO 驱动的连接语法组成。更深入的信息能从 PDO 具体驱动文档找到。
The dsn
参数支持三种不同的方式 创建一个数据库连接:
dsn
包含完整的DSN。
dsn
consists of uri:
followed by a URI that defines the location of a file containing
the DSN string. The URI can specify a local file or a remote URL.
uri:file:///path/to/dsnfile
dsn
consists of a name
name
that maps to
pdo.dsn.
in php.ini
defining the DSN string.
name
Note:
别名必须得在 php.ini 中定义了,不能是在 .htaccess 或 httpd.conf 中 。
DSN字符串中的用户名。对于某些PDO驱动,此参数为可选项。
DSN字符串中的密码。对于某些PDO驱动,此参数为可选项。
一个具体驱动的连接选项的键=>值数组。
成功则返回一个PDO对象。
如果试图连接到请求的数据库失败,则 PDO::__construct() 抛出一个 PDO异常(PDOException) 。
Example #1 Create a PDO instance via driver invocation
<?php
/* Connect to an ODBC database using driver invocation */
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>
Example #2 Create a PDO instance via URI invocation
The following example assumes that the file /usr/local/dbconnect exists with file permissions that enable PHP to read the file. The file contains the PDO DSN to connect to a DB2 database through the PDO_ODBC driver:
odbc:DSN=SAMPLE;UID=john;PWD=mypass
The PHP script can then create a database connection by simply passing the uri: parameter and pointing to the file URI:
<?php
/* Connect to an ODBC database using driver invocation */
$dsn = 'uri:file:///usr/local/dbconnect';
$user = '';
$password = '';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>
Example #3 使用别名创建一个PDO实例
The following example assumes that php.ini contains the following entry to enable a connection to a MySQL database using only the alias 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 'Connection failed: ' . $e->getMessage();
}
?>
Anonymous (2013-05-29 05:30:36)
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.
piotrekkr at o2 dot pl (2010-09-15 00:19:33)
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.
Mitsuaki Ishimoto (2010-08-29 11:14:57)
You have to use the following option "MYSQL_ATTR_READ_DEFAULT_FILE" to prevent someone from attacking your system by SQL Injection.
<?php
$dsn = 'mysql:host=' . DB_HOST . ';dbname=' . DB_NAME;
$dbh = new PDO(
$dsn,
DB_USER,
DB_PASS,
array(
PDO::MYSQL_ATTR_READ_DEFAULT_FILE => '/etc/my.cnf'
)
);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
?>
Victor T. (2010-02-20 09:34:41)
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\''));
?>
subme at interia dot pl (2008-11-25 14:03:45)
To specify a database connection port use the following DSN string
<?php
$dsn = 'mysql:dbname=testdb;host=127.0.0.1;port=3333';
?>