创建pdo对象_PDO 学习与使用 ( 一 ) :PDO 对象、exec 方法、query 方法与防 SQL 注入...

1.安装 PDO

数据库抽象层 PDO - PHP Data Object 扩展类库为 PHP 访问数据库定义了一个轻量级的、一致性的接口,它提供了一个数据访问抽象层,针对不同的数据库服务器使用特定的 PDO 驱动程序访问,如图:

Windows 环境下 PHP 5.1 以上版本通过编辑 php.ini文件来安装 PDO:去掉 extension=php_pdo.dll 前面的 ;

如果使用的数据库是 MySQL ,在 php.ini 文件中加载 MySQL 的 PDO 驱动:

添加 extension=php_pdo_mysql.dll 或者去掉该句前面的 ;

查看可用的 PDO 驱动程序,可以编写 php 文件进行查看:

如图:

或者通过打印 pdo_drivers() 函数来查看:

页面显示:

Array

(

[0] => mysql

[1] => sqlite2

)

2.创建 PDO 对象

PDO 对象中的成员方法是统一各种数据库的访问接口,在使用 PDO 与数据库交互之前,要创建 PDO 对象。在 PDO 的构造方法中,有 4 个参数:

1. 数据源名 DSN,用来定义一个确定的数据库和必须用到的驱动程序

2. 连接数据库的用户名

3. 连接数据库的密码,是可选参数

4. 连接所需的所有额外选项,是可选参数

以 MySQL 为例,创建一个 PDO 对象:

//数据源名(DSN)

$dsn = 'mysql:dbname=test;host=127.0.0.1';$user = "root";$pwd = "";$opt = array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8");$dbh = new PDO($dsn,$user,$pwd,$opt);

这里的第四个参数表示:向客户端发送的 SQL 语句中使用 UTF8 字符集,同时服务器发送回客户端的结果也是用 UTF8 字符集。

3. 调用构造方法

第一种方法是将参数嵌入到构造函数中,上面的例子用的就是这种方法:

$dsn = 'mysql:dbname=test;host=127.0.0.1';$user = "root";$pwd = "";$opt = array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8");try{$dbh = new PDO($dsn,$user,$pwd,$opt);

}catch(PDOException $e){echo "数据库连接失败: ".$e->getMessage();exit;

}

第二种方法是将 DSN 字符串存放在文件中,例如放在 d 盘相应目录的 dsn.txt 中:

}catch(PDOException $e){echo "数据库连接失败: ".$e->getMessage();

}

这里使用了 uri ( 统一资源标识符 ) 来定位文件的位置。使用 PHP 的语句可以获得当前 uri:

$uri = $_SERVER['REQUEST_URI'];echo $uri;

第三种方法是在 PHP 服务器的配置文件中维护 DSN 信息。

4.执行 SQL 语句

① 当执行 insert、update、delete 等没有结果集的查询时,使用 PDO 的 exec() 方法执行,执行成功后将返回受影响的行数。该方法不能用于 select 查询:

1 <?php2

3 //数据源名(DSN)

4 $dsn = 'mysql:dbname=test;host=127.0.0.1';5 $user = "root";6 $pwd = "";7 //第4个参数

8 $opt = array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8");9

10 try{11

12 $dbh = new PDO($dsn,$user,$pwd,$opt);13

14 }catch(PDOException $e){15

16 echo "数据库连接失败: ".$e->getMessage();17 exit;18 }19

20 $query = "update archives set title = '白夜行' where title = '花的圆舞曲_3'";21

22 //使用exec()方法执行insert,update,delete等

23 $affected = $dbh->exec($query);24

25 if($affected){26

27 echo '数据表archives中受影响的行数为:'.$affected;28

29 }else{30

31 print_r($dbh->errorInfo());32 }

② 当执行返回结果集的 select 查询时,或者所影响的行数无关紧要时,应当使用 PDO 对象中的 query() 方法,如果该方法成功执行所制定的查询,则返回一个 PDOStatement 对象,并且可以使用 PDOStatement 对象的 rowCount() 方法获取获取的数据行数:

1 <?php2

3 //数据源名(DSN)

4 $dsn = 'mysql:dbname=test;host=127.0.0.1';5 $user = "root";6 $pwd = "";7 //第4个参数

8 $opt = array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8");9

10 try{11

12 $dbh = new PDO($dsn,$user,$pwd,$opt);13 $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);14

15 }catch(PDOException $e){16

17 echo "数据库连接失败: ".$e->getMessage();18 exit;19 }20

21 $query = "select * from archives where title='白夜行'";22

23 try{24

25 //执行select查询,并返回PDOstatement对象

26 $pdostatement = $dbh->query($query);27 echo "一共从表中获取到".$pdostatement->rowCount()." 条记录:
";28 foreach($pdostatement as $row){29

30 echo $row['aid']."
";31 }32 }catch(PDOException $e){33

34 echo $e->getMessage();35 }

页面显示:

一共从表中获取到11 条记录:

540

541

544

547

550

553

556

559

562

565

568

5. 使用 PDO 过滤特殊字符,防止 SQL 注入,可以使用 PDO 的 quote() 方法:

$query = "select * from user where uname=".$dbh->quote($_POST['uname'])." and pwd=".$dbh->quote($_POST['pwd']);

参考资料:《细说PHP》第2版

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值