1. 程式人生 > >PDO預處理

PDO預處理

1.引數以?替代

<?php
  header('content-type:text/html;charset=utf-8');
  $dsn='mysql:host=localhost;dbname=test';
  $pdo=new PDO($dsn,'root','');
  $pdo->exec('set names utf8');

  $sql='SELECT * FROM users id>?'; //引數以 ? 替代
  $stmt=$pdo->prepare($sql); //建立預編譯物件
  $id=2;
  $stmt->bindParam(1,$id); //引數編號,具體值
  //$stmt->bindValue(1,2); //不需要提前賦值 直接傳引數
  $stmt->execute(); //執行程式碼
  $data=$stmt->fetchAll(PDO::FETCH_ASSOC); //獲取結果集 型別為關聯陣列
  var_dump($data);
  $pdo=null;
 ?>

 

2.引數以:name替代。推薦,更加便利。

<?php
  header('content-type:text/html;charset=utf-8');
  $dsn='mysql:host=localhost;dbname=test';
  $pdo=new PDO($dsn,'root','');
  $pdo->exec('set names utf8');

  $sql='SELECT * FROM users id>:id'; //引數以 :name 替代
  $stmt=$pdo->prepare($sql); //建立預編譯物件
  $id=2;
  $stmt->bindParam(":id",$id); //引數編號,具體值
  $stmt->execute(); //執行程式碼
  $data=$stmt->fetchAll(PDO::FETCH_ASSOC); //獲取結果集 型別為關聯陣列
  var_dump($data);
  $pdo=null;
?>

 

對於MySqli預處理,PDO執行查詢語句時,不需要繫結結果集,直接使用fetch()或者fetchAll()

PDO::FETCH_ASSOC          從結果集中獲取以列名為索引的關聯陣列。
PDO::FETCH_NUM             從結果集中獲取一個以列在行中的數值偏移量為索引的值陣列。
PDO::FETCH_BOTH            這是預設值,包含上面兩種陣列。

PDO的預處理方式可以防範常見的SQL注入