2013-11-18 4 views
-1

У меня есть сценарий разбиения на страницы, и я пытаюсь изменить базу данных mysql в базу данных pdo, но я получаю эту ошибку; SQLSTATE [42000]: Синтаксическая ошибка или нарушение прав доступа: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «DESCLIMIT -2,2» по строке 1pdo pagination limit error

Часть кода, что вызывает у меня проблемы;

$limit = "LIMIT ".($page-1)*$perPage.",$perPage"; 
//$offset = ($page - 1) * $perPage; 
$query = $db->prepare('SELECT image_id FROM images WHERE album_id= ? ORDER BY image_id DESC'.$limit); 
$query->bindValue(1, $album_id); 
//$query->bindParam(':limit', $limit, PDO::PARAM_INT); 
try{ 
$query->execute(); 
}catch (PDOException $e){ 
die($e->getMessage()); 
} 

Я искал в Google решения, но мое знание pdo недостаточно для правильного использования. У меня были такие ошибки; SQLSTATE [HY093]: Недопустимый номер параметра: количество связанных переменных не совпадает с числом токенов, из-за $query->bindParam(':limit', $limit, PDO::PARAM_INT);

Я не знаю, как это решить, может ли кто-нибудь мне помочь? Спасибо ...

+4

Согласно вашей ошибке, у вас возникла проблема с термином 'DESCLIMIT', который не является надлежащим SQL, я считаю, что вы собираетесь« DESC LIMIT ». Просто поставьте пробел в конце вашего заявления для подготовки ПОСЛЕ 'DESC'. –

+0

Я сделал ЗАКАЗ BY image_id DESC '. $ Limit); но это ничего не меняет. Пространство перед «оно лимит исчезает. – Robske

+0

Он должен выглядеть как 'ORDER BY image_id DESC '. $ Предел); '. Все до ORDER_BY должно быть в порядке. –

ответ

0

Кажется, что mysql не любит отрицательные смещения. Вы можете сделать это таким образом

$limit = ($page-1)*$perPage; 
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE); 
$sql = 'SELECT image_id FROM images WHERE album_id=? ORDER BY image_id DESC LIMIT ?,?'; 
$stmt = $pdo->prepare($sql); 
$stmt->execute([$album_id,$limit,$perPage]); 
$ids = $stmt->fetchAll(PDO::FETCH_COLUMN); 
+0

К сожалению, никаких различий нет. Конец ошибки теперь выглядит следующим образом; для правильного синтаксиса для использования около '-2,2' в строке 1 – Robske

+0

Я исправил код –

-1

В учебнике первый запрос был $count_query = $db->prepare('SELECT NULL FROM images where album_id= ?'); Это работало в учебнике, но не здесь, я думаю, что дал отрицательное значение. Я изменил это на $count_query = $db->prepare('SELECT * FROM images where album_id= ?'); , и ошибка исчезла. Сейчас появляются другие ошибки, надеюсь, я смогу это решить. Спасибо, что помогли мне решить эту ошибку.