預處理語句對於防止 mysql 注入是非常有用的。
預處理語句用於執行多個相同的 sql 語句,並且執行效率更高。
預處理語句的工作原理如下:
預處理:建立 sql 語句模板併發送到資料庫。預留的值使用引數 "?" 標記 。例如:
insert into myguests (firstname, lastname, email) values(?, ?, ?)資料庫解析,編譯,對sql語句模板執行查詢優化,並儲存結果不輸出。
執行:最後,將應用繫結的值傳遞給引數("?" 標記),資料庫執行語句。應用可以多次執行語句,如果引數的值不一樣。
相比於直接執行sql語句,預處理語句有兩個主要優點:
以下例項在 mysqli 中使用了預處理語句,並繫結了相應的引數:
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "mydb";
// 建立連線
$conn = new mysqli($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 字元告訴資料庫該引數為字串。
引數有以下四種型別:
每個引數都需要指定型別。
通過告訴資料庫引數的資料型別,可以降低 sql 注入的風險。
注意:如果你想插入其他資料(使用者輸入),對資料的驗證是非常重要的。
以下例項我們在 pdo 中使用了預處理語句並繫結引數:
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "mydbpdo";
try
catch(pdoexception $e)
$conn = null;
?>
PHP MySQL 預處理語句
預處理語句對於防止 mysql 注入是非常有用的。預處理語句用於執行多個相同的 sql 語句,並且執行效率更高。預處理語句的工作原理如下 預處理 建立 sql 語句模板併發送到資料庫。預留的值使用引數 標記 例如 insert into myguests firstname,lastname,ema...
mysql 預處理 PHP MySQL 預處理語句
php mysql 預處理語句 預處理語句對於防止 mysql 注入是非常有用的。預處理語句及繫結引數 預處理語句用於執行多個相同的 sql 語句,並且執行效率更高。預處理語句的工作原理如下 預處理 建立 sql 語句模板併發送到資料庫。預留的值使用引數 標記 例如 insert into mygu...
mysql預處理語句 MYSQL 預處理語句
一 預處理語句介紹 mysql支援服務端預處理語句,預處理語句利用高效的客戶端 服務端二進位制協議。用佔位符替換引數值的預處理語句有下列兩個好處 每次執行語句時,解析語句的開銷更小。通常,資料庫應用程式會處理大量相似的語句,只在子句中更改文字或變數值,比如查詢和刪除的where子句,更新的updat...