PHP的PDO对象预处理的2种实现方法,实现原理详解

PHP的PDO对象预处理的2种实现方法,实现原理详解

PDO预处理

  $author = '李白';

  $kind   = '五言绝句';

  $id     = '5';

  $query = 'SELECT * FROM poetry WHERE author=? AND kind=? AND id>?';//用问号代替要预处理的值

  $stmt = $pdo->prepare($query);//开启预处理,将 sql 语句传入


    实例代码开始:

  $stmt->bindValue(1, $author, [参数3]);//设定 ? 1位置的值

  $stmt->bindValue(2, $kind, [参数3]);//设定 ? 2位置的值

  $stmt->bindValue(3, $id, [参数3]);//设定 ? 3位置的值

    参数3:  PDO::PARAM_STR:默认值,字符串类型 通常不写第三个参数

        PDO::PARAM_INT:整数类型

  $suc = $stmt->execute();//以预处理执行前面传入的 SQL 语句

  实例代码结束:

    $args = [$author, $kind, $id];

    $suc  = $stmt->execute($args); 以上绑定方式可简写为此方法

    

    实例代码开始:

    $query = 'SELECT * FROM poetry WHERE author=:au AND kind=:ki AND id>:id';

    $stmt  = $pdo->prepare($query);

    $stmt->bindValue(':au', $author);

    $stmt->bindValue(':ki', $kind);

    $stmt->bindValue(':id', $id);

    $suc = $stmt->execute();以上绑定方式也可写为此方法,:au,:ki,:id称为命名占位符

    实例代码结束:

      $args = [':au'=>$author, ':ki'=>$kind, ':id'=>$id];

      $suc  = $stmt->execute($args); 以上绑定方式可简写为此方法


  $arr = $stmt->fetchAll(PDO::FETCH_ASSOC);//得到全部预处理查询结果,为索引数组


$pdo->beginTransaction();:开启数据库事务机制(开启事务机制的表必须为INNODB)

    $pdo->commit();:使事务机制之后的改动生效

    $pdo->rollBack();:使事务机制之后的改动回滚


最后编辑于:2019/08/27作者: 牛逼PHP

发表评论