2013-05-16 29 views
0

我真的很挠我的头,因为我想弄清楚为什么在MySQL客户端完美工作的查询并返回正确的结果,当由PDO 。我的查询是:查询在SQL客户端中工作返回没有行使用PHP和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代码,以便确保一切正常?

+5

也许是因为有两个不同的查询? 'ON blog_posts.id'和'ON blog_post.id' –

+0

当查询运行时'$ id'的值是多少? – War10ck

+0

@ War10ck实际上这个代码在'foreach'中,所以每次'$ id'都有一个不同的id值,这是正确的,所以它不会导致查询失败。 – haunted85

回答

1

您实际上并未执行准备好的语句。在尝试检索数据之前,您必须先执行它。

尝试这样:

$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对象。然后将参数绑定到PDOStatment对象和​​准备好的语句。

最后,您将使用fetch()得到结果。

+0

是的,谢谢。它像一个魅力。 – haunted85