《PHP与MySQL程序设计:014-PHP中操作数据库》由会员分享,可在线阅读,更多相关《PHP与MySQL程序设计:014-PHP中操作数据库(13页珍藏版)》请在金锄头文库上搜索。
1、PHPPHP中操作数据库中操作数据库PDO的优势uPHPDataObject,现已成为PHP最主流的数据库驱动u提供轻量级、清晰、方便的APIu统一各种RDBMS的共有特性和操作方法,差异化高级特性u易于抽象实现和兼容性开启PDO扩展u修改php.ini,去掉php_pdo.dll及php_pdo_mysql.dll的注释连接数据库u通过newPDO对象来建立数据库连接u通过在数据源名称中加入charset=utf8来指定字符集设置连接属性通过PDO:setAttribute()方法设置连接属性uPDO:ATTR_CASE设置返回结果集的字段大小写uPDO:ATTR_ERRMODE设置错误报告
2、方式uPDO:ATTR_PERSISTENT设置是否持久连接,默认为FALSEuPDO:DEFAULT_FETCH_MODE设置返回结果集的默认读取模式(关联数组、索引数字、对象等)操作方法u主要有PDO:query()、PDO:exec()及PDO:prepare()几种操作方法uPDO:query()主要用于有记录返回的操作,例如SELECTuPDO:exec()主要针对没有结果集返回的操作,例如INSERT、UPDATE、DELETE等操作,返回当前SQL执行后影响的记录数uPDO:prepare()主要用于以绑定变量的方式进行安全的操作执行操作u通过PDO:exec($sql)方法执行
3、指定的SQL语句u该方法返回该SQL语句所影响的记录数u通过PDO:lastInsertId()返回该插入操作生成的自增id$sql = exec($sql);var_dump($res);/1,插入1条新的数据查询操作u通过PDO:query($sql)方法获取指定的SQL查询的结果集u该方法返回该语句对应的PDOStatementu通过PDOStatement:fetch()方法循环遍历结果集u通过PDOStatement:fetchAll()方法一次性获取所有结果集数组$sql = “SELECT * FROM students ORDER BY id ASC”$statement =
4、$db-query($sql);while($r = $statement-fetch(PDO:FETCH_ASSOC) var_dump($r); $sql = “SELECT * FROM students ORDER BY id ASC”$statement = $db-query($sql);$allStudents = $statement-fetchAll();查询操作u通过PDOStatement:fetch()/fetchAll()方法的参数设置返回结果集的格式uPDO:FETCH_ASSOC返回字段名的关联数组uPDO:FETCH_NUM返回索引方式的数组uPDO:FETCH
5、_BOTH(default):综合返回以上两种方式uPDO:FETCH_OBJ以对象方式返回,字段名对应属性$sql = “SELECT * FROM students ORDER BY id ASC”$statement = $db-query($sql);$allStudents = $statement-fetchAll(PDO:FETCH_ASSOC);SQL注入介绍u所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令uSQL注入的一般方式就是通过提交特殊参数构造SQL语句u通过WHERE子句改变返回结果集u
6、通过错误的SQL导致服务器报错显示出错误信息$id = 0 OR 1=1;$sql = “SELECT * FROM students WHERE id=$id“$res = $db-query($sql)-fetch();SQL注入防范u对用户输入进行严格的类型校验及强制转型u不要使用动态拼接的SQL,使用绑定变量的方式u屏蔽服务器错误报告u上线前通过APPScan等工具进行全站安全扫描绑定变量u使用PDO:prepare($sql)准备执行u通过PDOStatement:execute($bindParams)绑定变量并立即执行SQLu通过PDOStatement:bindParam()方法绑定变量$sql = “SELECT * FROM students WHERE id=:id”$statement = $db-prepare($sql);$statement-execute(:id=$id);$sql = “SELECT * FROM students WHERE id=:id”$statement = $db-prepare($sql);$statement-bindParam(:id, $id);$statement-execute();参考uPHP与MySQL程序设计第31章uhttp:/