Php sql注入测试失败还是我阻止了?

Php sql注入测试失败还是我阻止了?,php,sql-server,Php,Sql Server,我做了一个登录系统,试图阻止sql注入,希望有人能指出我做错了什么 代码: 那么我的意思是我阻止了sql注入吗??还是我做不到??它有错误信息,所以任何人都可以给我建议??我已经读了很多书,但对sql注入的理解仍然很少。不要这样做 $sql = "SELECT * FROM $table WHERE user_name ='".$loginuser."'"; $results = $con->prepare($sql); $results-&

我做了一个登录系统,试图阻止sql注入,希望有人能指出我做错了什么

代码:

那么我的意思是我阻止了sql注入吗??还是我做不到??它有错误信息,所以任何人都可以给我建议??我已经读了很多书,但对sql注入的理解仍然很少。

不要这样做

$sql = "SELECT * FROM $table WHERE user_name ='".$loginuser."'";
            $results = $con->prepare($sql);
            $results->execute();
您使用的驱动程序支持准备好的语句,所以请使用它们

$sql = "SELECT * FROM $table WHERE user_name = ? and USER_PASSWORD = ?";
            $results = $con->prepare($sql);
            $results->execute(array($loginuser, $loginpassword));
我还更新了它,因此SQL会检查用户名和密码是否匹配,因此如果您从该查询中获得结果,则登录是成功的

以下是关于它的其他资源:

更新:

if ($results->rowCount() > 0) {
     echo "you have succeful login";
}else{
     echo "username and password is not correct";
     $redirect = 'nextinjection.php';
     header("Location: $redirect?reg=false");
}

谢谢你的帮助,最后一个问题,我的第一个例子是当返回致命错误时,无法阻止sql注入??那么我如何知道是失败还是成功??谢谢,希望了解更多。因此,您的注射尝试中仍包含尾随引号,因此无效。它会将
WHERE user_name='test'或1=1'
发送到数据库。我将添加条件检查来回答。很抱歉,我没有让您的代码工作,我做错了什么??PDOStatement::execute()最多需要1个参数,给定2个参数
$sql = "SELECT * FROM $table WHERE user_name = ? and USER_PASSWORD = ?";
            $results = $con->prepare($sql);
            $results->execute(array($loginuser, $loginpassword));
if ($results->rowCount() > 0) {
     echo "you have succeful login";
}else{
     echo "username and password is not correct";
     $redirect = 'nextinjection.php';
     header("Location: $redirect?reg=false");
}