PDO ошибка выборки c LIMIT

282
19 декабря 2016, 19:35

Почему выдает ошибку при таком запросе?

<?php 
    $num = 10;
    $start = 1;
    $sql = "SELECT * FROM `users_for_events` LIMIT ?, ? ";
    $data = array($start, $num);
    $stmt = $this->getCon()->prepare($sql);
    $stmt->execute($data);
    $stmt->fetchAll();
    var_dump($stmt->fetchAll());

Ошибка вот такого плана:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1327 Undeclared variable: '1'' in

Answer 1

В режиме эмуляции все переданные через execute() переменные PDO подставляет в запрос как строки, и в итоге запрос получается

LIMIT '10', '1'

что вызывает ошибку. Самым простым решением будет отключить режим эмуляции сразу после соединения,

$conn->setAttribute( PDO::ATTR_EMULATE_PREPARES, false ); 

и после этого данный код сразу заработает без ошибок.

READ ALSO
Запрос POST к VK.com

Запрос POST к VK.com

Вопрос к предыдущей теме: POST запрос к контакту

250
Как изменить функцию замены url?

Как изменить функцию замены url?

Есть такой код функции форматирования url, полученный из поля ввода

229
Наследование ошибка prepare()

Наследование ошибка prepare()

Есть 4 класса: Db, Core, User, ProfileProfile наседует User, User => Core, а Core наследует Db

217
Не вижу в диспетчере EventSubscriber

Не вижу в диспетчере EventSubscriber

Делаю по мануалу http://symfonycom/doc/current/cookbook/doctrine/event_listeners_subscribers

270