[学习笔记]php数据库访问抽象层PDO 1
来源:互联网 发布:网站推广软件skycc 编辑:程序博客网 时间:2024/06/05 02:46
PDO 提供了一个 数据访问 抽象层,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据,而且可以提高访问速度和有效防止SQL注入,从 PHP 5.1 开始附带了 PDO。(程序摘自php官网http://php.net/manual/zh/book.pdo.php)
1,数据库连接和断开
<?php$dsn = 'mysql:dbname=testdb;host=127.0.0.1'; //可以加上 charset=utf8; 设置编码方式$user = 'dbuser';$password = 'dbpassword';try { $dbh = new PDO($dsn, $user, $password); //连接数据库 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //设置错误处理模式,最好采用这种,需要使用try,catch捕获} catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage();}?>数据库的断开可以采用
$dbh=array();其实脚本结束后会自动断开连接
2,预处理语句与SQL防注入
下面例子获取数据基于键值已提供的形式。用户的输入被自动用引号括起来,因此不会有 SQL 注入攻击的危险。<?php$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?"); //使用?占位,也可以用另一种,这种较方便if ($stmt->execute(array($_GET['name']))) { //传入的一定要是数组,不用过滤 while ($row = $stmt->fetch()) { print_r($row); }}?>预处理特点:查询仅需解析(或预处理)一次,但可以用相同或不同的参数执行多次。提供给预处理语句的参数不需要用引号括起来,驱动程序会自动处理,防止sql注入。
注意:
1,不要直接把用户输入变量放入prepare语句中。先传给sql server语句,再传入变量。
2,like 模糊查询的方法,占整个位置
<?php$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE '%?%'"); //这个语句不会返回任何结果,PDO的机制并不是字符串的简单拼接,存在防注入的一些处理$stmt->execute(array($_GET['name']));// 占位符必须被用在整个值的位置$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE ?");$stmt->execute(array("%$_GET[name]%"));?>3,更好地防注入需要禁止php本地转义$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
详情:http://zhangxugg-163-com.iteye.com/blog/1835721
0 0
- [学习笔记]php数据库访问抽象层PDO 1
- PHP学习笔记【二】之《数据库抽象层PDO---PDO连接数据库》
- PHP学习笔记【一】之《数据库抽象层PDO---PDO简介、配置与启用》
- PHP学习笔记【四】之《数据库抽象层PDO---PDO事务处理》
- PDO数据库访问抽象层
- PHP PDO数据库抽象层
- PHP数据库抽象层--PDO
- PDO数据库抽象层笔记
- 【PHP自学笔记】第十四章 PDO数据库抽象层
- PHP学习笔记【三】之《数据库抽象层PDO---PDOStatement对象的使用》
- 学习pdo 数据访问抽象层
- PHP数据库抽象层PDO、ADODB、PHPLib
- PHP数据库抽象层PDO、ADODB、PHPLib
- PHP数据库抽象层PDO操作
- 13. php数据库抽象层PDO(一)
- 13. php数据库抽象层PDO(二)
- 14.php数据库抽象层PDO(三)
- 15.php数据库抽象层PDO(四)
- 笔记未整理
- 设计模式学习第四天
- 栈的链表表示
- opnet14.5 tutorial翻译——包交换网络仿真
- 【异或+贪心】HDU5661Claris and XOR【BestCoder Round #79 (div.2)】
- [学习笔记]php数据库访问抽象层PDO 1
- StringBuilder StringBuffer
- LeetCode 299. Bulls and Cows(公牛和母牛)
- 【补充】过程是什么?
- Android学习笔记(动画)
- Leetcode no. 169
- hadoop平台搭建(4)--伪分布式的配置及运行
- 上周工作中遇到的问题以及解决方法总结
- Android-->圆角图片,圆角任意View,圆角父布局Layout(任意形状的View且超简洁实现)