选择Php和mysql奇怪的错误

时间:2016-08-29 14:21:24

标签: php mysql login

我是网页设计的初学者,我遇到了这个问题。我正在尝试创建一个登录页面,但是当我尝试创建登录时,它会抛出一个错误,如下所示:

  

SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在第1行使用':username和passwordhash =:passwordhashed'附近的正确语法

使用php代码

Try { 
//    $SQL = 'INSERT INTO Passwords (username, password, passwordhashed) VALUES (:username,:password,:passwordhashed);';
$username = $_REQUEST['username'];
$password = $_REQUEST['password'];
$PasswordHashed = sha1($password);
echo "Username: ". $username ."<br> Password: ". $password . "<br> PasswordHashed: " . $PasswordHashed;
$SQL = null;
$SQL = "SELECT * FROM BlaBla WHERE (username=:username and passwordhash=:passwordhashed);";
$Statement = $MySQL->prepare($SQL);
$Statement->bindValue(':username', $username);
$Statement->bindValue(':passwordhashed', $PasswordHashed);
$Statement->execute();
$Statement = $MySQL->query($SQL);
if ($Statement->rowCount() < 1 ) {
    echo 'NOPE';
} else {
    echo 'welcome back '. $username;
}

} catch(PDOException $e) {
$ErrorTitle = 'Error';
$Error = "error writing to database";
$ErrorInfo = '<p>Please contact administrator at stephan.littel@stecasso.nl</p> <br> <p>'. $e->getMessage() . '</p>';
include './HTML/Error.php';
exit();
}

我不知道错误是什么。有谁可以帮助我?

2 个答案:

答案 0 :(得分:2)

下面:

$Statement = $MySQL->prepare($SQL);
   ^---your prepared statement
$Statement->bindValue(':username', $username);
$Statement->bindValue(':passwordhashed', $PasswordHashed);
$Statement->execute();
$Statement = $MySQL->query($SQL);
                        ^----raw queries have no placeholders

您准备一份声明并执行它。但是,然后使用相同的SQL执行RAW查询,替换准备版本的结果。您不能在原始查询中使用占位符。因此你的错误。

最终 - &gt; query()调用无用而且冗余。

答案 1 :(得分:0)

发现问题。问题是我用查询和执行。我的slopy bug跟踪错误。