2017-06-16 67 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 ...