我确实花了几个小时在谷歌上搜索,但我不知道自己做错了什么。我使用POST,我自己在phpMyAdmin中尝试了查询,它起作用了,但在PDO中不起作用,我不知道为什么。它在我使用mysql_query时起作用,但我想保护自己免受SQL注入的影响。
这是我正在使用的代码:
<?php
if(isset($_POST['user']) and isset($_POST['pass'])) {
$name = $_POST['user'];
$pass = $_POST['pass'];
$db = new PDO('mysql:host=localhost;dbname=*****;charset=utf8', '*****', '*****');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query = $db->prepare("SELECT * FROM stored WHERE _User LIKE :username AND _Pass LIKE :password");
$query->bindValue(":username", $user, PDO::PARAM_STR);
$query->bindValue(":password", $pass, PDO::PARAM_STR);
$query->execute();
echo $query->rowCount();
}
?>
看起来您在第41行命名用户名变量$name,但当您在第46行绑定参数时,您将其称为$user。
要么您使用的是古老版本的PHP,要么您的数据库中没有符合条件的行。升级第一个,检查您的数据并查询第二个。
此外,正如神圣的利纳斯对我们说的那样,"说话很便宜,给我看看密码"
不要告诉我们"当我使用诸如此类的查询时,它起了作用"运行它。在同一个文件中,在这个代码旁边。这样你就有了一个的证明只有这样的证据才重要,而你的推测则不然。
然而,严格地说,你根本不需要这个功能,也不需要你的大部分代码
$stmt = $db->prepare("SELECT 1 FROM stored WHERE _User = ? AND _Pass = ?");
$stmt->execute(array($_POST['user'],$_POST['pass']));
echo $stmt->fetchColumn();
足够了。