PDO在连接数据库时所可能遇到的问题

这里简单总结一下,在使用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地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值