我真的很挠头,因为我试图弄清楚为什么一个查询在MySQL客户端完美工作并返回适当的结果,当PDO提供时没有效果。我的查询是:
SELECT id, title, img
FROM blog_posts JOIN blog_img
ON blog_posts.id = blog_img.id_post
WHERE id='1';
和我的PHP/PDO代码是:
$query = $this->dbconn->get_db_access()->prepare("SELECT id, title, img
FROM blog_posts JOIN blog_img
ON blog_posts.id = blog_img.id_post
WHERE id=:id");
$query->bindParam(":id", $id);
$result = $query->fetch(PDO::FETCH_ASSOC);
print_r($result);
没有抛出PDOException
,但$result
数组为空。有人能解释一下吗?我做错了什么吗?是否有一种方法来"检查"绑定后的"最终"SQL代码,并在它被扔进去,让我确保一切正常?
实际上并没有执行准备好的语句。您必须在尝试检索数据之前执行它。
试试这样写:
$sql = "SELECT id, title, img
FROM blog_posts JOIN blog_img
ON blog_post.id = blog_img.id_post
WHERE id=:id";
$stmt = $this->dbconn->get_db_access()->prepare($sql);
$stmt->bindParam(':id', $id);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
注意prepare()
将返回一个PDOStatement
对象。然后将参数绑定到pdostatement对象,并将准备好的语句execute()
。
最后使用fetch()
得到结果。