php中的mysql连接字符串注意事项

原帖地址:http://blog.csdn.net/ffb/article/details/8895630


php里有三套操作mysql的库,分别是自带的mysql系列函数、mysqli和mysqlpdo。这三套库的下层又使用了两个数据操作引擎,分别是libmysql和mysqlnd,具体使用哪个引擎由php编译时决定。

在实际使用这三个库的时候,存在一个小的问题,就是连接字符串的写法。对于host:port的格式,在libmysql中和mysqlnd中支持情况有差异。所以如果你使用了这种写法又切换了引擎或者使用的库,则可能导致问题。


下面结合新浪云计算SAE中的数据库操作列举一下各种情况,如非说明,默认均是libmysql环境下,具体是:php内置mysql函数的正确写法:

mysql_connect('127.0.0.1:3306', $user, $password);

其中第一个参数是host:port格式,libmysql引擎、mysqlnd和SAE均支持这种格式的写法。

官方的说明在:http://cn2.php.net/manual/en/function.mysql-connect.php


mysqli中的正确写法:

$conn = new mysqli("127.0.0.1", $user, $pwd, $db, "3306");

如果写成:

$conn = mysqli_connect('127.0.0.1:3306', $user, $password);

或:

$conn = new mysqli("127.0.0.1:3306", $user, $pwd);

其中第一个参数是host:port格式,原生mysqli不支持这种写法,在SAE中支持此写法。

官方的说明在:http://cn2.php.net/manual/en/function.mysqli-connect.php


pdomysql中的正确写法:

$conn= new PDO('mysql:host=127.0.0.1;port=3306', $user, $password);

原生mysqlpdo和SAE均支持此写法。

如果写成:

$conn= new PDO('mysql:host=127.0.0.1:3306', $user, $password);

原生mysqlpdo和SAE均不支持此种写法。但是在mysqlnd引擎环境下,支持此写法。

官方的说明在:http://cn2.php.net/manual/en/pdo.construct.php


综上得到针对host:port格式的支持情况的列表:

libmysql引擎下:

mysql:支持

mysqli:不支持(SAE中做了支持)

mysqlpdo:不支持


mysqlnd引擎下:

mysql:支持

mysqli:支持

mysqlpdo:支持


结论:php中操作mysql数据库的时候,从兼容性角度考虑,最好明确指示port参数,而不要使用冒号分隔的缩写写法。

猜你喜欢

转载自blog.csdn.net/ffb/article/details/8895630