zoukankan      html  css  js  c++  java
  • php数据库访问抽象层PDO

         PDO 提供了一个 数据访问 抽象层,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据,而且可以提高访问速度和有效防止SQL注入,从 PHP 5.1 开始附带了 PDO。(程序摘自php官网,多看php manual 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 注入攻击的危险。
    1 <?php
    2 $stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?");  //使用?占位,也可以用另一种,这种较方便
    3 if ($stmt->execute(array($_GET['name']))) {    //传入的一定要是数组,不用过滤
    4   while ($row = $stmt->fetch()) {
    5     print_r($row);
    6   }
    7 }
    8 ?>
        预处理特点:查询仅需解析(或预处理)一次,但可以用相同或不同的参数执行多次提供给预处理语句的参数不需要用引号括起来,驱动程序会自动处理,防止sql注入。

    注意:

    1,不要直接把用户输入变量放入prepare语句中。先传给sql server语句,再传入变量。

    2,like 模糊查询的方法,占整个位置

    1 <?php
    2 $stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE '%?%'");    //这个语句不会返回任何结果,PDO的机制并不是字符串的简单拼接,存在防注入的一些处理
    3 $stmt->execute(array($_GET['name']));
    4 
    5 // 占位符必须被用在整个值的位置
    6 $stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE ?");
    7 $stmt->execute(array("%$_GET[name]%"));
    8 ?>
    3,更好地防注入需要禁止php本地转义$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

    详情:http://zhangxugg-163-com.iteye.com/blog/1835721


  • 相关阅读:
    【Idea】使用中的一些问题
    【Redis】Linux配置Redis(单点)
    【Zookeeper】Linux上安装zookeeper(单节点)
    【Echarts】设置主题、扇形格式化
    【JS】两个数组的交集、差集、并集、补集、去重
    【MySQL】 准确查询空值、ISNULL函数
    【健康】能量系统与训练应用和心肺耐力与运动表现
    【RabbitMQ】消息队列RabbitMQ与Spring集成
    【Java、Util】元和分的相互转换
    k8s入门系列之介绍篇
  • 原文地址:https://www.cnblogs.com/jcuan/p/5558467.html
Copyright © 2011-2022 走看看