2017-06-16 73 views
1

如何防止SQL注入如果我在PHP程序中編寫該網站?我可以使用準備的語句嗎?或者存在其他方式?防止SQL注入 - PHP程序

例如:

$query ="INSERT INTO users (name,username,password,email,gender) VALUES ('$name','$username','$password','$email','$gender')"; 
$result = mysqli_query($connect,$query) or die ("Error : ". mysqli_error($connect)); 
+0

使用PDO準備的查詢 – Marcin

+0

使用預處理語句。是的,可以在程序界面中使用它們。請參閱[文檔中的示例](http://php.net/manual/en/mysqli.prepare.php#refsect1-mysqli.prepare-examples)。有一個OO例子和一個程序例子。 –

+0

你得到了一個正確的答案。我的觀點是PDO/mysql比mysqli更容易使用。無論哪種情況,使用參數和關於轉義或sql注入的問題都基本消失。 – gview

回答

1

是的,你可以寫使用的mysqli在程序代碼綁定參數準備好的語句。這裏有一個基於你的例子的解決方案。

$query =" 
    INSERT INTO users (name, username, password, email, gender) 
    VALUES (?, ?, ?, ?, ?)"; 
if (($stmt = mysqli_prepare($connect, $sql)) === false) { 
    die("Error : " . mysqli_error($connect)); 
} 
if (mysqli_stmt_bind_param($stmt, "ssss", $name, $username, $password, $email, $gender) === false) { 
    die("Error : " . mysqli_stmt_error($stmt)); 
} 
if (mysqli_stmt_execute($stmt) === false) { 
    die("Error : " . mysqli_stmt_error($stmt)); 
} 
$result = mysqli_stmt_get_result($stmt); 
if (mysqli_errno()) { 
    die("Error : " . mysqli_stmt_error($stmt)); 
} 
... fetch from $result ...