【发布时间】: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。但是,是的,我认为这不是很明显。