什麼是Prepared Statement?
Prepared Statement或參數化查詢是一種用於資料庫查詢時的技術,使用時會在SQL指令中需要填寫數值的地方用參數代替。
運作原理
使用時,資料庫伺服器不會把設參數的地方當作SQL指令的一部分來處理,而是先在資料庫編譯完後,再將參數套用並執行。
為什麼要使用它?
Prepared Statement是目前公認防禦SQL Injection攻擊最有效的方法。當然除了安全方面,它在效能上也佔有優勢。
在PHP上使用Prepared Statement
$name = 'grandpa'; #自訂變數
$conn = mysqli_connect('localhost', 'root', '', 'db'); #連線至資料庫
$sql = 'SELECT * FROM users WHERE username=?'; #SQL指令 ?代表參數
$stmt = mysqli_stmt_init($conn); #使用前初始化
mysqli_stmt_prepare($stmt, $sql); #將SQL進行編譯
mysqli_stmt_bind_param($stmt, 's', $name); #帶入參數值 's'代表一個string 若參數有兩個string則為'ss'以此類推
mysqli_stmt_execute($stmt); #執行
#使用完釋放資源
mysqli_stmt_close($stmt);
mysqli_close($conn);