目录
第一章 PDO简介
1-1 PDO简介
1-2 PDO特性:
1-3 PDO的配置与启用
1-4 PDO连接数据库
第二章 PDO对象的使用
2-1 [PDO]exec()方法进行建表操作
2-2 [PDO]exec()方法执行插入记录的操作
2-3 [PDO]用exec方法实现更新、删除的SQL操作
2-4 [PDO]errorCode()和errorInfo()方法查看错误信息
2-5 [PDO] query()方法执行查询语句
2-6 [PDO]prepare()和execute()方法执行查询语句
第一种:直接设置参数,选择返回结果集的一个方式。(关联、索引)
第二种:使用setfetchMode方法设置参数,然后直接调用方法。
2-7 [PDO]设置数据库连接属性
直接设置数据库连接属性:
使用PDO对象的第四个参数设置PDO的连接属性:
第三章 PDOStatement对象的使用
3-1 [PDO]quote()方法防止SQL注入
3-2 [PDO]预处理语句中占位符(:和?)的使用
3-3 [PDO]bindParam()方法绑定参数
3-4 [PDO]bindValue()方法绑定参数
3-5 [PDO]bindColumns()方法绑定参数
3-6 [PDO]fetchColumns()方法从结果集中返回一列
3-7 [PDO]debugDumpParams()方法打印一条预处理语句
来源:
PDO(PHP Data Object),数据库访问抽象层,统一各种数据库的访问接口。
PHP可以兼容市面上所有的数据库,但是使用每种数据库的命令都有所不同,各种数据库用互不相同的API完成相同的功能,造成了应用程序之间难以维护和移植的问题,造成此种现象的原因是抽象度不够,访问接口不统一,因此才有了PDO的出现。
PDO出现是为了移植到不同的数据库更加方便。
1.编码一致性
PDO提供可用于各种数据库的单一接口。
2.灵活性
PDO在运行时需加载数据库驱动程序。所以不需要每次在使用不同的数据库时重新配置或重新编译PHP。
3.高性能
PDO是由C语言编写的,因此性能很好。
4.面向对象特性
PDO用的是PHP5面向对象的特性,可以获得更高效的数据库通信,PDO扩展只是一个抽象的接口层利用PDO本身不能实现任何数据库的操作。必须使用一个特定的形式把各自的特色表现出来。
1、通过参数形式连接数据库
2、通过URI的形式连接数据库
3、通过配置文件的形式连接数据库
数据源$dsn(data source name)
驱动器名称:mysql
主机名:localhost
数据库名:imooc
通过exec方法可以执行创建一个数据表的sql语句
lastInsertId()返回最后插入的ID号。
更新记录,返回一条记录受影响。
删除记录
注意:exec()函数对select函数没有作用,查询操作不返回受影响的行数。
执行结果:
返回的是一个statement对象,我们要查看里面的内容:
执行结果:
使用了foreach方法显示内容。如果想要显示所有的内容,只需将where id去掉即可。
#通过query方法也可以实现数据的增加,但是我们通常只用query执行查询操作。增加造作我们通常用exec去实现。
通过条件进行查询,这两个函数是第二种查询的方法,通过预处理的形式进行查询。
prepare() //准备要执行的SQL语句,返回PDOStatement对象。
execute() //执行一条预处理语句。
执行结果:
执行结果返回的是一个pdostatement对象。通过execute()方法执行预处理语句,返回true代表有记录!
执行结果:
通过fetch()方法得到结果集中的一条记录:
执行结果:
当结果集中有很多记录,可以通过循环fetch将所有记录都读取出来:
Fetchall方法可以返回一个包含结果集中所有行的数组:
返回的结果是二维数组:
设置返回的是一个object对象:
设置返回二维数组中的关联部分:
返回关联+索引:
setFetchMode() //为语句设置默认的获取方式
与数据库连接相关的两个方法:
我们也可以通过PDO对象的第四个属性设置数据库连接属性。
结果:
通过set设置后改变了连接属性。
数据库连接的相关属性:自动提交(AUTOCOMMIT)、默认错误处理模式(ERRMODE)、字段名称是否大小写(CASE)、数据库是否持久连接(PERSISTENT)。
有些属性也不是我们的所有驱动都支持:超时设置(TIMEOUT)、返回空字符串转换为SQL的null(ORACLE_NULLS)
其他:SERVER_INFO、SERVER_VERSION、CLIENT_VERSION、连接状态(CONNECTION_STATUS)
遍历数据库连接的属性:
Constant函数可以返回常亮的值。
Login.html
doAction.php
rouCount() //返回上一个SQL语句影响的行数。
命令成功执行,返回值为1,代表查询到了结果。(rowCount函数在查询中返回结果集中记录的条数,对于INSERT、UPDATE、DELETE返回的是受影响的行数。)
这种登录页面存在SQL注入漏洞: ‘ or 1=1 # ,密码随便输入或者不输入,即可查询出所有的结果。
在PDO中通过quote方法防止SQL注入:
通过预处理语句可以防止SQL注入,可以编译一次,多次执行。
预处理语句中的占位符有两种写的形式:
第一种防SQL注入的方法(以:的形式):
第二种防SQL注入的方法(以?的形式):
想多次执行一条SQL语句的时候也可以通过绑定参数到指定变量的形式。
bindParam() //绑定一个参数到指定的变量名。
绑定参数的时候可以有三个参数:
第一个参数是占位符时使用的语法(使用?传的是索引号1、2、3…)
第二个参数是给你一个参数绑定到变量的值。(取的是变量的引用,不可以直接写值的形式)
第三个可以指定一下变量的类型。
用:形式进行绑定实现多次执行循环语句实现添加。(给变量赋值几次,就执行几次添加)
红框表示写几次,INSERT语句便执行几次。
用?形式进行绑定实现多次执行循环语句实现添加。
使用命名参数占位符:号执行删除记录的操作
id号小于10的记录被删除。
当你在执行插入的SQL语句时,我们可以使用bindValue()函数将某一个重复插入的值绑定到参数,并且只绑定一次即可。如果想要再次执行,不必再重复绑定email。
使用:号
我们可以用bindColumns()方法将你的一列绑定到指定的参数
bindColumn() //绑定一列到一个PHP变量。
绑定列值实现查询。
columnCount() //返回结果集中的列数。
getColumnMeta() //返回结果集中一列的元数据。
结果:
fetchColumn() //从结果集中的下一行返回单独的一列。
结果返回第一列的第一行数据(索引从0开始,即第0列是username)
因为每fetchColumns()一次相当于讲你的指针向下移动了一行。如果同时输出,结果会是第一列的第一行和第二列的第二行。
和列有关的方法到此结束
?号
:号
http://www.imooc.com/learn/164