在进度落后的项目中增加人手只会导致进度更加落后。
----Fred Brooks
什么是PDO?
PDO全称Php Data Object(php数据对象),他是一个支持丰富数据库的访问接口,也就是说,有了PDO,我们不必要使用php提供的相关函数来访问数据库,而是通过PDO提供的接口来访问
PDO的特点
- PDO是一个数据库访问抽象层,作用是统一各种数据库的访问接口,PDO相比其他方式来说更高效。
- PDO通过轻巧,清晰,方便的函数,统一数据库操作
- PDO吸取数据库交互的教训,结合Php5的新特性,来进行方便的数据库操作
- PDO是模块化的,能够在需要的时候为用户数据库后端加载驱动程序,而不必重新编译或安装整个应用程序
下面我们直接进行pdo的使用(注意这里我用的新版的php,所以默认为开启状态,否则需要更改配置php.ini),具体的配置情况我们可以通过phpinfo()查看
链接数据库
//数据库种类
$dbms = 'mysql';
//数据库名
$dbname = "surine";
//主机
$host = 'localhost';
//配置dsn参数(可以看到格式比较奇怪)
$dsn = "$dbms:host=$host;dbname = $dbname";
try {
//进行链接
$pdo = new PDO($dsn, "root", "");
echo "MySql链接成功";
} catch (Exception $e) {
echo "错误日志".$e->getMessage();
}
这里PDO构造是接受4个参数,第4个是访问配置选项,暂时不考虑
SQL语句
PDO中可以通过3种方法来执行SQL语句
1.exec()
通过这个函数来执行一些语句,来实现对数据库的操作
try {
$pdo = new PDO('mysql:host=localhost;dbname=surine', "root", "");
echo "MySql链接成功";
$aff = $pdo->exec("delete from users WHERE user = '1'");
echo "输出数据,影响行数".$aff;
} catch (Exception $e) {
echo "错误日志".$e->getMessage();
}
这里细心的读者会发现我修改了连接方式,采用 直接写语句的方式把数据库种类,主机名称等传进去,这是因为如果不这么写可能出现找不到数据库的情况,那么当然我们的数据也就没法操作了,如果你遇到显示不了数据的情况,可以采用这种写法,如果不行,可以使用
$pdo->errorInfo()
这个方法来检查错误信息
再比如说,插入数据
$aff = $pdo->exec("insert into users(user,pswd) values('mt','123456')");
2.query()
query方法返回执行结果后的PDO结果集,那么他的参数也是一个sql语句,下面我们演示一下访问表的例子
$query="select * from users";//需要执行的sql语句
$arr = $pdo->query($query)->fetchAll();
foreach ($arr as $var){
echo "账号".$var['user'];
echo "密码".$var['pswd']."<br>";
}
那么我们可以看到,我们用 $pdo->query($query)查询数据,并且使用fetchAll方法,将查询到的数据转化格式,最后使用foreach语句进行打印
3.prepare()和execute()
这是PDO的预处理语句里包含的方法,首先通过prepare()方法查询准备工作,通过execute来执行查询,下面是一个演示
$query="select * from users";//需要执行的sql语句
$res=$pdo->prepare($query);//准备查询语句
$res->execute();
$result=$res->fetchAll(PDO::FETCH_ASSOC);
foreach ($result as $var){
echo "账号".$var['user'];
echo "密码".$var['pswd']."<br>";
}
这样的打印结果和上面的一致
4.fetch() , fetchAll()
终于说到fetch这里了,在前面用到很多次fetchAll方法
fetch()方法用于获取结果集里的下一行
那么fetchAll就是所有行,他们的返回值是一个array
这里还有一个fetchColumn()方法,是获取某一行,那么传入的参数就是一个int值
错误处理
我们使用errorcode()方法获取错误码,也可以使用errorInfo()方法获取详细信息,通过这些信息,我们可以得到,代码出现了什么错误。
事务处理
事务是保证操作正确进行的一大解决方法,那么PDO也是支持事务的。那么事务分为几个部分。
//开启事务
$pdo->beginTransaction();
//提交事务
$pdo->commit();
//事务回滚
$pdo->rollBack();
那么比如说我们添加一条信息到数据库,如果添加失败,防止其产生影响,那么我们可以用回滚来撤销更改,下面是一个例子
try {
$pdo = new PDO('mysql:host=localhost;dbname=surine', "root", "");
echo "MySql链接成功";
$pdo->beginTransaction(); //开启事务
$query="insert users(user,pswd)values('this','this')";//需要执行的sql语句
$res=$pdo->prepare($query);//准备查询语句
$res->execute();
if($res){
echo "添加数据成功";
}else{
echo "添加数据失败";
}
$pdo->commit(); //数据提交
} catch (Exception $e) {
$pdo->rollBack(); //数据回滚
echo "错误日志".$e->getMessage();
}
可以看到,我们写了一个添加语句,然后开启了事务,在执行语句后,提交事务,如果发生问题,我们在catch里也有回滚的操作。
总结
关于PDO暂时先记录这么多,在以后的学习中我会补充更多。