2017-02-06 58 views
-1

我想通过串联重用查询,但它似乎不工作。PDO - 简单连接查询

我有这个计数行(工作):

$q = $db->prepare("SELECT id, image_date, image_link, image_name, image_category FROM image WHERE image_date < NOW() AND image_category= :category"; 
$q->bindValue(':category', $category, PDO::PARAM_STR); 
$q->execute(); 
$row = $q->fetchColumn(); 

而且我想与来连接使用数据(没有工作):

$q .= " ORDER BY id DESC LIMIT :limit"); 
$q->bindValue(':limit', 1, PDO::PARAM_INT); 
$q->execute(); 

我也与测试表单但不起作用:

$q=$q. " ORDER BY id DESC LIMIT :limit"); 
+1

你将不得不编辑您的问题,就是你尝试过什么样的确切位置。 –

+0

您的第一个查询只能计数。你必须检查你的房屋 –

回答

0

与PDO的问题是,你必须准备一个查询之前,你可以绑定任何东西,一旦准备,查询显然不能再被延长。

此外,您的第一个查询只能计数。所以越简单越好 - 只需要运行两个单独的查询无连接

$q = $db->prepare("SELECT count(*) FROM image WHERE image_date < NOW() AND image_category= ?"; 
$q->execute([$category]); 
$count = $q->fetchColumn(); 

然后

$q = $db->prepare("SELECT id, image_date, image_link, image_name, image_category 
FROM image WHERE image_date < NOW() AND image_category= ? ORDER BY id DESC LIMIT ?"; 
$q->execute([$category, $limit]); 
$rows = $q->fetchall(); 
+0

好的,这是我想听到的答案。所以我应该做两个请求。谢谢 ! – Nicolas

0

您需要将第二部分追加到SQL字符串 但不是准备好的语句变量$q

$sql = "SELECT id, image_date, image_link, image_name, " . 
    "image_category FROM image WHERE image_date < NOW() " . 
    "AND image_category= :category ORDER BY id DESC LIMIT :limit"; 
$q = $db->prepare($sql); 
$q->bindValue(':category', $category, PDO::PARAM_STR); 
$q->bindValue(':limit', 1, PDO::PARAM_INT); 
$q->execute(); 
$row = $q->fetchColumn(); 
+0

fetchColumn()在这里做什么? –

+0

我从原始问题中添加了该语句。这里'fetchColumn()'将返回第一个结果行的'id',或者如果没有行,则返回'FALSE'。 – Ananth

+0

这不会从我的第一个陈述返回相同的结果。 – Nicolas