百科狗-知识改变命运!
--

PDO::__construct() - PDO类

梵高12个月前 (11-21)阅读数 21#技术干货
文章标签连接到

PDO::__construct()

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

创建一个表示数据库连接的 PDO 实例

说明

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

创建一个表示连接到请求数据库的数据库连接 PDO 实例。

参数

dsn

数据源名称或叫做 DSN,包含了请求连接到数据库的信息。

通常,一个 DSN 由 PDO 驱动名、紧随其后的冒号、以及具体 PDO 驱动的连接语法组成。更深入的信息能从PDO 具体驱动文档找到。

The$dsn参数支持三种不同的方式创建一个数据库连接:

Driver invocation

$dsn包含完整的DSN。

URI invocation

$dsnconsists 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

Aliasing

$dsnconsists of a name$namethat maps topdo.dsn.$nameinphp.inidefining the DSN string.

Note:

别名必须得在php.ini中定义了,不能是在.htaccess或httpd.conf中。username

DSN字符串中的用户名。对于某些PDO驱动,此参数为可选项。

password

DSN字符串中的密码。对于某些PDO驱动,此参数为可选项。

driver_options

一个具体驱动的连接选项的键=>值数组。

返回值

成功则返回一个PDO对象。

错误/异常

如果试图连接到请求的数据库失败,则PDO::__construct()抛出一个 PDO异常(PDOException)。

范例

Create a PDO instance via driver invocation

PDO::__construct() - PDO类

Create a PDO instance via URI invocation

The following example assumes that the file/usr/local/dbconnectexists 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 theuri:parameter and pointing to the file URI:

使用别名创建一个PDO实例

The following example assumes thatphp.inicontains the following entry to enable a connection to a MySQL database using only the aliasmydb:

[PDO]
pdo.dsn.mydb="mysql:dbname=testdb;host=localhost"
To get UTF-8 charset you can specify that in the DSN.
$link = new PDO("mysql:host=localhost;dbname=DB;charset=UTF8");
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.
To connect throught unix socket you need to use 

You musn't specify host when using socket.
To specify a database connection port use the following DSN string 
If you use the UTF-8 encoding, you have to use the fourth parameter : 
Sqlite:

If 'example.db' does not exist, no exception is thrown but the file 'example.db' is created.
Although not explicitly stated, parameters in the PDO $dsn string may be case-sensitive on some platforms or drivers. 
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.

You should always try ... catch ... 
For IBM i / iSeries / AS400 DB2 connections, you can specify system naming and library lists for php_pdo modules > 1.3.3-sg2

See http://yips.idevcloud.com/wiki/index.php/XMLSERVICE/PHPPDOChangeLog
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";
}
To connect to the database via a function use this and call the getConnection function in the class constructor. 
If you happen to create a dsn like this...

... 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.

I wasted a half hour on that one.
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)
pdo单例模式

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)