2017-02-06 8 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