PDO防止mysql注入(三種方式)

2021-10-06 06:48:05 字數 1401 閱讀 1070

pdo資料物件擴充套件是php訪問資料庫的乙個輕量級介面,pdo 提供了乙個資料訪問抽象層,這意味著,不管使用哪種資料庫,都可以用相同的函式(方法)來查詢和獲取資料。

使用quote過濾特殊字元,為sql語句中的字串新增引號,轉為字串

$dbms='mysql';     //資料庫型別

$host='127.0.0.1'; //資料庫主機名

$dbname='test'; //使用的資料庫

$user='root'; //資料庫連線使用者名稱

$pass='123456'; //對應的密碼

$dsn="$dbms:host=$host;dbname=$dbname";

$pdo = new pdo($dsn, $user, $pass); //初始化乙個pdo物件

$username='1 or 1=1';

$username=$pdo->quote($username);

$sql="select * from recorders where id=";

var_dump($sql);exit();

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

var_dump($stmt->rowcount());

select * from recorders where id=1 or 1=1
select * from recorders where id='1 or 1=1'
通過預處理語句傳遞引數,防注入

$id='1 or 1=1';

$sql="select * from recorders where id=:id";

$stm=$pdo->prepare($sql);

//陣列中引數的順序與查詢語句中問號的順序必須相同

$stm->execute(array(':id'=>$id));

var_dump($stm->rowcount());

通過bindparam()繫結引數

第三個引數可以指定條件的型別

$id='1 or 1=1';

$sql="select * from recorders where id=:id";

$stm=$pdo->prepare($sql);

$stm->bindparam(':id',$id,pdo::param_int);

//陣列中引數的順序與查詢語句中問號的順序必須相同

$stm->execute();

var_dump($stm->rowcount());

Spring三種注入方式

spring有三種依賴注入的方式,第一種是構造方法注入 12 xx cc ss ppp bean類 public class per public void get 這種方式缺點是在獲取bean物件時,注入資料是必須的操作,否則無法建立,即使是無用的資料也要注入。如果有多個構造方法,每個構造方法只有...

Spring DI三種依賴注入

1.賦值 name為屬性名,value為屬性值 這種方法的依賴注入,底層呼叫的方法是set方法 2.構造器注入 構造方法 在相應的類中需要新增構造方法 如果賦值的資料的8中簡單的型別,使用value,如果是應用型別 除了string 使用ref value屬性值,index為索引對應建構函式中的第幾...

注入的三種方式

依賴注入3種方式 1.set注入 通過set 賦值賦值,預設使用的是 set方法 依賴注入底層是通過反射實現的。2.構造器注入 通過構造方法賦值 需要注意 如果 的順序 與構造方法引數的順序不一致,則需要通過type或者index或name指定。3.p命名空間注入引入p命名空間 xmlns p 簡單...