PDO如何执行SQL语句

zxh5566  2016-07-16 06:58   Hits: 

在使用PDO执行查询数据之前,先提供一组相关数据,创建PDO对象并通过mysql驱动连接localhost的mysql数据库服务器,
 
mysql服务器的登录名为mysql_user,密码mysql_pwd,创建一个以testdb命名的数据库,并在该数据库中创建一个联系人信息
 
表contactinfo,建立数据表的sql语句如下:
create table contactinfo(
uid mediumint(8) unsigned not null auto_increment,
name varchar(50) not null,
departmentId char(3) not null,
address varchar(80) not null,
phone varchar(20) not null,
email varchar(100),
PRIMARY KEY(uid) 
);
在PHP脚本中,通过PDO执行SQL查询与数据库进行交互,可以分为三种不同的策略,使用哪一种方法取决于你要做什么操作
 
1、使用PDO::exec()
当执行 insert update delete等没有结果集的查询时,使用PDO对象中的exec()方法执行,该方法成功执行后,将返回受影
 
响的行数,注意,该方法不能用于select查询,示例如下:
 
<?php
try{
$dbh = new PDO('mysql:dbname=testdb;host=localhost','mysql_user','mysql_pwd');
}catch(PDOException $e){
echo "数据库连接失败".$e->getMessage();
exit;
}
$query = "update contactinfo set phone='15822422406' where name='zxh5566'";
$affected = $dbh->exec($query);
if($affected){
echo '数据表contactinf中受影响行数为'.$affected;
}else{
print_r($dbh->errorInfo());
}
?>
 
2、使用PDO::query()
 
当执行返回结果集的select查询时,或者所影响的行数无关紧要时,应当使用PDO对象中的query()方法,如果该方法成功执
 
行指定的查询,返回一个PDOStatement对象,如果使用了query()方法,并想了解影响的行数,可以使用PDO对象中的
 
rowCount()方法获取,示例代码如下
 
<?php
try{
$dbh = new PDO('mysql:dbname=testdb;host=localhost','mysql_user','mysql_pwd');
}catch(PDOException $e){
echo "数据库连接失败".$e->getMessage();
exit;
}
$query = "selct name,phone,email from contactinfo where departmentId='d01'";
$pdostatement = $dbh->query($query);
echo "一共从表中取出".$pdostatement->rowCount().'条记录\n';
try{
foreach($pdostatement as $v){
echo $v['name'].'\t';
echo $v['phone'].'\t';
echo $v['email'].'\n';
}
}catch(PDOException $e){
echo $e->getMessage();
print_r($dbh->errorInfo());
}
 
?>
 
3、使用PDO::prepare()和PDOStatement::execute()
 
当同一个查询需要多次执行时,使用预处理语句的方式来实现效率会更高,从MYSQL4.1开始,就可以结合MYSQL使用PDO对预
 
处理语句的支持,使用预处理语句就需要使用PDO对象中的prepare()方法去准备一个将要执行的查询,再使用PDOStatement
 
对象中的execute()方法来执行。
上一篇:创建PDO对象,PDO对象的成员方法
下一篇:PDO对预处理语句的支持