Mysqli支持準備好的語句,可防止SQL注入攻擊。它看起來是這樣的:
/* Create a prepared statement */
$stmt = $mysqli -> prepare("SELECT column FROM table WHERE name=?");
/* Bind parameters */
$stmt -> bind_param("s", $_POST['checkname']);
/* Execute it */
$stmt -> execute();
/* Bind results */
$stmt -> bind_result($result);
/* Fetch the value */
$stmt -> fetch();
echo $result;
查看manual瞭解更多信息。
的簡要介紹,以響應註釋:
在$stmt->prepare("...")
,你形成你的查詢,你持有任何變量你打算用用「的地方?」
在$stmt -> bind_param(...)
中,您將變量綁定到相應的問號。第一個參數是類型,下面的參數是變量。如果您使用的是字符串和整數,在括號內部,它看起來就像"si", $stringVar, $intVar
在$stmt -> bind_result(...)
您說明您要綁定的結果。如果查詢是針對某個名稱和年齡的,那麼該內容看起來就像$name, age
在$stmt->fetch()
中,您正在獲取結果。如果是多行回來,你會做這樣的事情:
而($ stmt->取()){// 代碼在這裏 }
或者,你可以使用PDO。它看起來像這樣:
/* Create a prepared statement */
$stmt = $pdo->prepare("SELECT column FROM table WHERE name=:checkname");
/* Bind parameters */
$stmt->bindParam(':checkname', $_POST['checkname']);
/* Execute it */
$stmt->execute();
/* Fetch results */
$obj = $stmt->fetchObject();
echo $obj->column;
查看manual瞭解更多信息。
[Escaping](http://www.php.net/manual/en/mysqli.real-escape-string.php)將有助於正確地做到這一點。更好的是Mysqli已經支持的[bound params](http://www.pontikis.net/blog/dynamically-bind_param-array-mysqli)。 – mario