mysql 預處理 PHP MySQL 預處理語句

2021-10-25 14:24:53 字數 2015 閱讀 9595

php mysql 預處理語句

預處理語句對於防止 mysql 注入是非常有用的。

預處理語句及繫結引數

預處理語句用於執行多個相同的 sql 語句,並且執行效率更高。

預處理語句的工作原理如下:

預處理:建立 sql 語句模板併發送到資料庫。預留的值使用引數 "?" 標記 。例如:insert into myguests (firstname, lastname, email) values(?, ?, ?)

資料庫解析,編譯,對sql語句模板執行查詢優化,並儲存結果不輸出。

執行:最後,將應用繫結的值傳遞給引數("?" 標記),資料庫執行語句。應用可以多次執行語句,如果引數的值不一樣。

相比於直接執行sql語句,預處理語句有兩個主要優點:

預處理語句大大減少了分析時間,只做了一次查詢(雖然語句多次執行)。

繫結引數減少了伺服器頻寬,你只需要傳送查詢的引數,而不是整個語句。

預處理語句針對sql注入是非常有用的,因為引數值傳送後使用不同的協議,保證了資料的合法性。

mysqli 預處理語句

以下例項在 mysqli 中使用了預處理語句,並繫結了相應的引數:

例項 (mysqli 使用預處理語句)

<?php $servername="localhost";$username="username";$password="password";$dbname="mydb";//建立連線$conn=newmysqli($servername,$username,$password,$dbname);//檢測連線if($conn->connect_error)//預處理及繫結$stmt=$conn->prepare("insert into myguests (firstname, lastname, email) values (?, ?, ?)");$stmt->bind_param("sss",$firstname,$lastname,$email);//設定引數並執行$firstname="john";$lastname="doe";$email="[email protected]";$stmt->execute();$firstname="mary";$lastname="moe";$email="[email protected]";$stmt->execute();$firstname="julie";$lastname="dooley";$email="[email protected]";$stmt->execute();echo"新記錄插入成功";$stmt->close();$conn->close();?>

解析以下例項的每行**:

"insert into myguests (firstname, lastname, email) values(?, ?, ?)"

在 sql 語句中,我們使用了問號 (?),在此我們可以將問號替換為整型,字串,雙精度浮點型和布林值。

接下來,讓我們來看下 bind_param() 函式:

$stmt->bind_param("sss", $firstname, $lastname, $email);

該函式繫結了 sql 的引數,且告訴資料庫引數的值。 "sss" 引數列處理其餘引數的資料型別。s 字元告訴資料庫該引數為字串。

引數有以下四種型別:

i - integer(整型)

d - double(雙精度浮點型)

s -string(字串)

b - blob(binary large object:二進位製大物件)

每個引數都需要指定型別。

通過告訴資料庫引數的資料型別,可以降低 sql 注入的風險。

注意: 如果你想插入其他資料(使用者輸入),對資料的驗證是非常重要的。

pdo 中的預處理語句

以下例項我們在 pdo 中使用了預處理語句並繫結引數:

例項 (pdo 使用預處理語句)

<?php $servername="localhost";$username="username";$password="password";$dbname="mydbpdo";trycatch(pdoexception$e)$conn=null;?>

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

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

mysql 預處理 MySQL的預處理技術

所謂的預處理技術,最初也是由mysql提出的一種減輕伺服器壓力的一種技術!傳統mysql處理流程 1,在客戶端準備sql語句 2,傳送sql語句到mysql伺服器 3,在mysql伺服器執行該sql語句 4,伺服器將執行結果返回給客戶端 這樣每條sql語句請求一次,mysql伺服器就要接收並處理一次...

mysql 預處理語句 in MySQL預處理語句

預製語句的sql語法基於三個sql語句 prepare stmt name from preparable stmt execute stmt name using var name var name prepare stmt name prepare語句用於預備乙個語句,並賦予它名稱stmt na...