@Farrien
Tell me who

Почему не работает LIMIT в этом подготовленном запросе?

$sql = "SELECT t1.target_id, SUM(t1.cnt) as hm, t2.id, t2.name, t2.second_name, t2.avatar, t2.studyGroup FROM votes AS t1, people AS t2 WHERE t1.target_id=t2.id GROUP BY t2.id ORDER BY hm DESC, t2.name ASC LIMIT ?";
	$o1 = $this->DB->prepare($sql);
	$args = array(
		$this->rl_count
	);
	$o1->execute($args);


Выводит ничего. Если просто число поставить, то выводит записи, а подготовленным выражением нет. $this->rl_count это 20.
  • Вопрос задан
  • 89 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
limit можно передавать параметром. Проблема в комбинации двух фактов:
1) эмуляция prepared statements в pdo дефолтно передаёт строки
2) парсер mysql утверждает, что limit обязан быть числом

Поэтому необходимо исправить один любой из этих нюансов:
1) указать тип параметра явно:
$q = $dbh->prepare("select ... limit :limit");
$q->bindValue(':limit', 10, PDO::PARAM_INT);
$q->execute();

2) либо отключить эмуляцию prepared statements: PDO::ATTR_EMULATE_PREPARES => false в настройках соединения.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Badoo Development Москва
от 140 000 до 180 000 руб.
Badoo Development Москва
от 180 000 до 250 000 руб.
от 160 000 до 180 000 руб.
21 авг. 2018, в 20:22
530 руб./в час
21 авг. 2018, в 19:08
500 руб./за проект
21 авг. 2018, в 18:45
50000 руб./в месяц