0

我确实花了几个小时谷歌搜索和搜索,但我不知道我做错了什么。我正在使用 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();
    }
?>
4

2 回答 2

1

看起来您在第 41 行命名了用户名变量 $name,但是当您在第 46 行绑定参数时,您将其命名为 $user。

于 2013-09-01T08:20:03.403 回答
0

要么您使用的是旧版本的 PHP,要么您的数据库中没有符合条件的行。升级第一个并检查您的数据并查询第二个。

此外,正如 Holy Linus 对我们所说,“Talk is Cheap, Show Me The Code”。
不要告诉我们“当我使用 blah blah 查询时它起作用了”。运行。在同一个文件中,紧挨着这段代码。这样你就有证据了。只有这样的证明很重要,而您的推测则无关紧要。

但是,严格来说,你根本不需要这个函数,以及你的大部分代码

$stmt = $db->prepare("SELECT 1 FROM stored WHERE _User = ? AND _Pass = ?");
$stmt->execute(array($_POST['user'],$_POST['pass']));
echo $stmt->fetchColumn();

足够的。

于 2013-09-01T08:15:10.420 回答