PHP PDO 預處理語句與儲存過程

2022-06-08 08:45:07 字數 1968 閱讀 2444

很多更成熟的資料庫都支援預處理語句的概念。

什麼是預處理語句?可以把它看作是想要執行的 sql 的一種編譯過的模板,它可以使用變數引數進行定製。預處理語句可以帶來兩大好處:

預處理語句如此有用,以至於它們唯一的特性是在驅動程式不支援的時pdo 將模擬處理。這樣可以確保不管資料庫是否具有這樣的功能,都可以確保應用程式可以用相同的資料訪問模式。

下面例子通過用 name 和 value 替代相應的命名佔位符來執行乙個插入查詢

<?php

$stmt =$dbh->prepare("insert into registry (name, value) values (:name, :value)");$stmt->bindparam(':name',$name);$stmt->bindparam(':value',$value);// 插入一行$name ='one';$value =1;$stmt->execute();// 用不同的值插入另一行$name ='two';$value =2;$stmt->execute();?>

下面例子通過用 name 和 value 取代 ? 佔位符的位置來執行一條插入查詢。

<?php

$stmt =$dbh->prepare("insert into registry (name, value) values (?, ?)");$stmt->bindparam(1,$name);$stmt->bindparam(2,$value);// 插入一行$name ='one';$value =1;$stmt->execute();// 用不同的值插入另一行$name ='two';$value =2;$stmt->execute();?>

下面例子獲取資料基於鍵值已提供的形式。使用者的輸入被自動用引號括起來,因此不會有 sql 注入攻擊的危險。

<?php

$stmt =$dbh->prepare("select * from registry where name = ?");if($stmt->execute(array($_get['name'])))}?>

如果資料庫驅動支援,應用程式還可以繫結輸出和輸入引數.輸出引數通常用於從儲存過程獲取值。輸出引數使用起來比輸入引數要稍微複雜一些,因為當繫結乙個輸出引數時,必須知道給定引數的長度。如果為引數繫結的值大於建議的長度,就會產生乙個錯誤。

<?php

$stmt =$dbh->prepare("call sp_returns_string(?)");$stmt->bindparam(1,$return_value,pdo::param_str,4000);// 呼叫儲存過程$stmt->execute();print"procedure returned $return_value\n";?>

還可以指定同時具有輸入和輸出值的引數,其語法類似於輸出引數。在下乙個例子中,字串"hello"被傳遞給儲存過程,當儲存過程返回時,hello 被替換為該儲存過程返回的值。

<?php

$stmt =$dbh->prepare("call sp_takes_string_returns_string(?)");$value ='hello';$stmt->bindparam(1,$value,pdo::param_str|pdo::param_input_output,4000);// 呼叫儲存過程$stmt->execute();print"procedure returned $value\n";?>

<?php

$stmt =$dbh->prepare("select * from registry where name like '%?%'");$stmt->execute(array($_get['name']));// 佔位符必須被用在整個值的位置$stmt =$dbh->prepare("select * from registry where name like ?");$stmt->execute(array("%$_get[name]%"));?>

PHP PDO 預處理語句與儲存過程

很多更成熟的資料庫都支援預處理語句的概念。什麼是預處理語句?可以把它看作是想要執行的 sql 的一種編譯過的模板,它可以使用變數引數進行定製。預處理語句可以帶來兩大好處 預處理語句如此有用,以至於它們唯一的特性是在驅動程式不支援的時pdo 將模擬處理。這樣可以確保不管資料庫是否具有這樣的功能,都可以...

PHP PDO中的預處理

1 建立 sql 語句模板併發送到資料庫。預留的值使用引數 標記 許多成熟的資料庫都支援預處理語句 prepared statements 的概念。它們是什麼東西?你可以把它們想成是一種編譯過的要執行的sql語句模板,可以使用不同的變數引數定製它。注意 1 這裡講到sql語句模版,什麼是sql語句模...

mysql預處理語句 MYSQL 預處理語句

一 預處理語句介紹 mysql支援服務端預處理語句,預處理語句利用高效的客戶端 服務端二進位制協議。用佔位符替換引數值的預處理語句有下列兩個好處 每次執行語句時,解析語句的開銷更小。通常,資料庫應用程式會處理大量相似的語句,只在子句中更改文字或變數值,比如查詢和刪除的where子句,更新的updat...