php7.0,不支持mysql_系列函数,支持mysqli和pdo,更推荐的是pdo!
将项目中的安装文件的mysql_系列函数,升级为pdo函数的过程中,看了看pdo的操作文档。
1.我们都知道,首先得链接数据库成功,使用mysql很简单:
mysql_connect('127.0.0.1:3306', 'root', 'root'),if判断返回值即可。
而pdo链接,正确返回一个pdo对象,错误则会抛出个pdo异常,得使用:
try{
$link = new PDO($dsn, $user, $password);
}catch(DPOException $e){
echo $e->getMessage();
}
2.针对pdo的dsn的问题,纠结了好久。。
先说下dsn的格式:
dsn前缀:例如:'mysql:'
host:'127.0.0.1'
port:'3306'// 默认可不写
dbname:‘test'// 数据库
unix_socket:mysql的socket文件(/tmp/mysql.sock),不可同host&port方式一起使用
charset:// 5.3.6以后新增,字符集,默认是utf-8
上面就是所有的参数格式,这里得强调下,查看手册,发现所有的例子,dsn中都包含了dbname这个参数,让我很纠结了半天,以为pdo的链接必须有dbname。对于初始应用的安装,我们需要的是创建一个新的数据库,开始并不存在。所以我就想了 "每个mysql安装后,都应该有个test数据库",所以,dsn中就是 "dbname=test",然后在连接成功后,创建好数据库,再使用 "use mydb" 切换为新创建的数据库,然后创建表!
------------------------------------------------------------------------------------------------------------
想法有点天真。。。有的用户可能直接删除了test数据库!第二天负责人说了下,它测试了下没有dbname也可以链接成功,我居然都不懂得去测测。。。。。对自己也是无语了。。。。。这才认真的去找了下手册,别人的评论,确实有个人说了:
所以,dbname是可选的!!
最后,再分析下dsn参数支持的3种不同的方式:
1.就是我们最常用的 "驱动调用方式",就是上面的
2.URI调用方式(一个uri定位的文件,文件中包含的就是dsn的字符串),可本地或远程文件。必须有 'uri:' 前缀
uri:file://url
3.别名方式,我们可在php.ini文件中定义,明确说明,不可在.htaccess 或 httpd.conf中调用
[pdo]
pdo.dsn.mydb="mysql:dbname=test;host=localhost"
new PDO('mydb', 'root', 'root);