从零开始之ecshop基础篇上(24)_项目管理_非技术区_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 非技术区 > 项目管理 > 从零开始之ecshop基础篇上(24)

从零开始之ecshop基础篇上(24)

 2013/12/20 2:09:17  cnblogs`  博客园  我要评论(0)
  • 摘要:PDO,PHP-Data-ObjectsPHP提供的另一种,数据库的操作方式,以对象的方式.(类比成MySQLDB)数据库抽象层的方式,操作数据的。抽象层:指的是不体现某种数据库具体操作,而是可以针对多种数据库类型都进行操作的功能。PHP底层实现的,用C写的。效率会高些。抽象层:抽取的公共操作的集合数据驱动:具体的数据库操作的实现。基本使用开启扩展开启PDO,与需要的驱动的扩展支持。PDO的扩展内置的,而不是mysql驱动,不是内置。extension=php_pdo_mysql.dll
  • 标签:
  1. PDO, PHP-Data-Objects

PHP提供的另一种,数据库的操作方式,以对象的方式.(类比成MySQLDB)

数据库抽象层的方式,操作数据的。

抽象层:指的是不体现某种数据库具体操作,而是可以针对多种数据库类型都进行操作的功能。

PHP底层实现的,用C写的。效率会高些。

抽象层:抽取的公共操作的集合

数据驱动:具体的数据库操作的实现。

  1. 基本使用

    1. 开启扩展

开启PDO,与需要的驱动的扩展支持。PDO的扩展内置的,而不是mysql驱动,不是内置。extension=php_pdo_mysql.dll(php.ini)

与OOP语法为基础操作????对象的方法调用

  1. 实例化PDO类对象

需要为构造方法传递

dsn:data source name 数据源名称:用于标识一个数据库的来源(在哪)

在127.0.0.1 主机的3306 端口的mysql数据库服务器上的 shop 数据库。

mysql:host = 127.0.0.1:port = 3306;dbname=shop

数据源前缀(数据库服务器的类型):数据源选项

用户

密码

驱动选项:支持很多驱动独立的配置选项

典型的,设置连接字符串

PDO::MYSQL_ATTR_INIT_COMMAND,mysql驱动的初始化命令,典型的设置成 set names utf8

  1. 发送SQL语句

利用PDO对象的query方法,可以完成语句的发送:

  1. 处理返回数据

存在返回数据的SQL,在执行后,返回一个语句对象,对象内封装了对所有记录结果的操作。

PDOstatement类的对象,就是结果对象。

利用该对象,将数据取出

  1. 关闭

销毁对象即可

  1. 常见操作

对SQL初次操作都是使用PDO对象,后续操作PDOstatement对象。

  1. 执行SQL

分成 存在 返回数据 与 不存在返回数据 调用的方法是不一样。

$pdo->query();使用于执行存在返回数据SQL语句。

$pdo->exec();使用于执行 没有返回数据的SQL

增,删,改,没有返回数据。

该方法,返回ini数据,表示,当前影响的记录数(删除了几行,更新了几行)

  1. 获取数据

$PDOstatement->fetchAll();

默认返回的是索引和关联,可以通过第一个参数加以设置:????

PDO::FETCH_ASSOC;关联

PDO::FETCH_NUM;索引

PDO::FETCH_BOTH;全部,默认

$PDOstatement->fetch()获取一条记录

$PDOstatement->fetchColumn();第一条记录的第一个数据

  1. 事务支持

提供了三个封装方法:

$pdo->beginTransaction;开启事务

$pdo->commit();提交

$pdo->rollback;回滚

  1. 取得自动增长的最新ID

$pdo->lastInsert();

  1. 错误处理

mysql扩展,发生了sql的执行错误,不报错:称之为静默模式。

PDO在发生sql错误时呢?默认也是静默模式。

PDO还支持其他的错误模式:

三种:静默模式????silent mode

????警告模式:出现错误,触发一个警告级别的标准错误

????异常模式:出现错误,抛出一个异常

  1. 静默模式,Silent mode

默认的,出现错误,没有任何提示,需要判断执行结果,才知道是否存在错误。

  1. 警告模式,WARNING mode

通过设置PDO对象的属性,达到修改错误模式的目的:$pdo->setAttribute(属性标识,属性值)

使用错误的处理方法

????$pdo->errorCode();

????$pdo->errorInfo()完成处理

  1. 异常模式,Exception Mode

    1. 什么是异常

也是一种错误,发生在PHP的oop代码中,对错误的一种对象形式的封装处理。

set_error_handler()

异常处理分成三个阶段:

抛出,相当于触发。throw来抛出异常

监视与捕获,相当于处理阶段。

try {

????可能抛出异常的代码段

????if () {

????throw 异常

}

} catch () {

????//捕获异常

}

其中,异常,就是一个对象,应该是Exception类(异常类)及其子类(扩展类)的对象。

  1. PDO处理异常

PDO抛出的是Exception类的子类PDOException类的对象

  1. 预处理SQL

执行SQL的一种方式,也是MySQL执行的方法。

将单纯的中心一条语句的过程,拆分成:SQL编译(预处理),数据绑定,执行三个阶段。

$sql = "insert into it_goods (goods_id, goods_name, shop_price) values (null, 'itcast', 1234.56)";

当需要,重复的执行若干条SQL语句,但是SQL的语句结构相同,只是数据不同时:除掉数据部分,结构部分相同

可以,先编译结构部分,再将数据绑定上,最后执行。此时可升掉每次编译相同结构的SQL的时间,称之为预处理的执行方式。

使用pdo,可以完成上面的执行方式。

  1. 得到SQL的结构部分

数据的部分,应该使用问号,或者是:标识符 加以代替:

  1. 预编译结构部分

使用PDO对象的prepare()方法可以完成:该方法返回一个PDOstatement对象,用于后续处理

  1. 绑定数据

使用PDOstatement对象的bindValue()或者bindParam()来完成。

  1. 执行绑定数据后的SQL编译结果

利用PDOstatement对象的execute()完成:

典型应该是:所有的数据准备好,循环绑定执行:

另外一个预编译的优势,在于可以对数据自动地转义处理:

如果没有转义,典型的:但引号会发生SQL语句冲突,导致错误。

例如mysql_query()不会自动转义:

典型的使用mysql_real_escape_data对需要参与sql执行的SQL数据做处理

该对mysql数据转义的工作非常重要:影响到网站的安全!

如何避免:理论上,将所有参与SQL执行的数据,都先做处理才可以:

甚至:会将所有$_GET,$_POS内的数据转义之后才使用。

建议:只针对参与SQL执行的数据

以上危害:称之为:SQL-inject SQL注入。利用用户数据,影响SQL的执行结果。

  • 相关文章
发表评论
用户名: 匿名