【问题标题】:Can't figure out this bindParam issue无法弄清楚这个 bindParam 问题
【发布时间】:2019-03-28 10:43:46
【问题描述】:

我正在尝试使用 PDO 从 MySql 数据库中获取一些数据,但无论我做什么,使用准备好的语句时我什么都得不到……请告诉我我做错了什么。

以下代码运行但什么也不返回。

try {
    $dbh = new PDO('mysql:host=localhost;dbname=banim', 'root', '');
    $uName = "banim";       //$_POST['uName'];
    $email = "Rabak@gmail.com";            //$_POST['email'];
    $query = $dbh->prepare("SELECT * from users WHERE email = :email OR WHERE uName = :name");
    $query->setFetchMode(PDO::FETCH_ASSOC);
    $query->bindParam(":name", $uName);
    $query->bindParam(":email", $email);
    $query->execute();
    foreach ($query as $row) {
        print_r($query);
    }
} catch (PDOException $e) {
    echo "PDOException: " . $e->getMssage() . PHP_EOL;
}

【问题讨论】:

  • 把print_r($query);改成print_r($row);看看
  • 您的 $query 是一个 PDO 语句类,而不是一个数组。您需要获取结果。例如fetchAll().
  • @KIKOSoftware PDO 结果是iterable为了方便。
  • @deceze:我明白你的意思了。说明书哪里写的?我找不到它。我能找到的最好的是在 PDOStatement 类的介绍中:“表示一个准备好的语句,并且在执行该语句后,一个关联的结果集。”,但这不是很清楚。
  • @KIKO PDOStatement 记录在 implements Traversable 中,手册中有一个示例:php.net/manual/en/pdo.connections.php#example-1027。但是,是的,我认为这不是很明显。

标签: php pdo


【解决方案1】:

Alive To Die 写的是正确的,而且 SQL 字符串中还有一个额外的 WHERE 也弄乱了答案,这是最终代码:

try {
    $dbh = new PDO('mysql:host=localhost;dbname=banim', 'root', '');
    $uName = "banim";       //$_POST['uName'];
    $email = "Rabak@gmail.com";            //$_POST['email'];
    $query = $dbh->prepare("SELECT * from users WHERE email = :email OR uName = :name");
    $query->setFetchMode(PDO::FETCH_ASSOC);
    $query->bindParam(":name", $uName);
    $query->bindParam(":email", $email);
    $query->execute();
    while($row = $query->fetch()){
        print_r($row);
    }
} catch (PDOException $e) {
    echo "PDOException: " . $e->getMssage() . PHP_EOL;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多