这里简单总结一下,在使用PDO一开始,也就是构造函数的时候所可能遇到的问题。
连接远程数据库的空格问题
<?php
$conn = new PDO('mysql:host=123.4.5.6;dbname=test_db;port=3306','username','password');
?>
有的同学无论怎么样都会失败,人儿如果说你在mysql:与host上加上一个空格就会成功
<?php
$conn = new PDO('mysql: host=123.4.5.6;dbname=test_db;port=3306','username','password');
?>
$pdo=null不能关闭连接
文档上有一点说的不是很准确,在使用PHP 5.4.26,如果说你只是把Pdo实例置为null可能并不会关上连接。
尝试下面的代码
$pdo = new PDO('pgsql:host=192.168.137.1;port=5432;dbname=anydb', 'anyuser', 'pw');
sleep(5);
$stmt = $pdo->prepare('SELECT * FROM sometable');
$stmt->execute();
$pdo = null;
sleep(60);
?>
检查一下你的mysql,你会惊讶的发现,连接会持续60秒,有人会以为是结果集的问题
<?php
$pdo = new PDO('pgsql:host=192.168.137.160;port=5432;dbname=platin', 'cappytoi', '1111');
sleep(5);
$stmt = $pdo->prepare('SELECT * FROM admin');
$stmt->execute();
$stmt->closeCursor();
$pdo = null;
sleep(60);
?>
```
你会惊讶的发现还是不可以。你需要做的只是把statement置为null即可
构造方法中PDO::ATTR_ERRMODE
如果你在构造方法中使用上述代码,无论如何都会出发一个警告,抛出一个异常,如果你设置PDO::ATTR_ERRMODE 参数,只会在今后的使用中出发警告异常。
尽量使用127.0.0.1
如果说你用的不是默认端口,使用localhost就会有问题
为什么呐?
如果用localhost,mysql库就会自动的使用Unix sockets。为了强制的使用TCP/IP你需要指定Ip地址