2014-09-11 4 views
0

Я пытаюсь выполнить запрос, один работает, а другой неPDO запрос возвращения 0

Код:

$sth = $this->_pdo->prepare("SELECT * FROM `messages` WHERE `service_id` = :service AND `created` > (NOW() - INTERVAL 7 DAY) LIMIT 1, :limit"); 
    $leng = $this->_settings->length; 
    $sth->bindParam(":service", $this->_settings->service, PDO::PARAM_INT); 
    $sth->bindParam(":limit", $leng, PDO::PARAM_INT); 
    $sth->execute(); 
    $component_data = $sth->fetchAll(PDO::FETCH_OBJ); 
    var_dump($component_data); 

эхо значения: SELECT * FROM сообщений WHERE service_id = 3 AND создал > (NOW() - INTERVAL 7 DAY) LIMIT 1, 5 этот запрос ISN» т работает

и это одно: SELECT * FROM сообщения WHERE service_id = 2 AND создано > (NOW() - INTERVAL 7 DAY) LIMIT 1, 5

Если я выполняю первый внутри моего инструмента редактора базы данных я получаю это как результат:

result

Почему не первый запрос ничего возвращения? и почему второй запрос возвращает что-то? хотя они одинаковы?

+0

Обратите внимание, что ** 'LIMIT 1, n' ** является« пропусканием »первой строки, возвращенной; если вы не хотите пропустить эту строку, вы должны использовать либо ** 'LIMIT 0, n' **, либо просто **' LIMIT n' **. – spencer7593

+0

@ spencer7593 Я знаю, но я пропускаю первую строку по разным причинам, но если вы посмотрите на мой пример, то не рабочий запрос все равно что-то возвращает. –

+0

Последнее предложение в вопросе не имеет большого смысла. «первый» и «первый» – Chuck

ответ

1

Я не обнаружил какой-либо конкретной ошибки.

Но первым подозреваемым в списке является bindParam. Для отладки я бы попытался использовать скаляр, а также выделил значение.

$service_param = $this->_settings->service; 
var_dump($service_param); 
$sth->bindParam(":service", $this->_settings->service, PDO::PARAM_INT); 

Для отладки, я бы также попробуйте удалить привязку заполнитель для LIMIT, и жестко прописывать, что в заявлении.


Поскольку нет никакой проверки возвращения из «подготовить» и «выполнять» функции, так что я буду считать, что режим ошибки PDO установлен на исключение, если происходит ошибка базы данных. То есть я предполагаю, что соединение с базой данных имеет следующие атрибуты:

$this->_pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
+0

Привет, спасибо за ответ, но почему-то ошибка была связана с тем, что $ this -> _ settings-> service возвращал «2» вместо 2 –

+0

Так как ваш ответ объясняет мне много, я поставил ваш в качестве принятого. –

0

Я вижу различные ошибки.

1: (удален игнорировать)

2: Ваш лимит положение должно быть 0, что-то. Если положить 1, он пропускает 1 запись.

+0

Прошу прощения, но оба ваших заявления ошибочны. Я хочу пропустить первую запись +, если я удалю pdo :: FETHC_OBJ. Я получаю полупринципный тройной массив. –

+0

. Каков вывод, если вы опускаете FETCH_OBJ? – Chuck

+0

Просто обычный массив, но каждый ключ был дублирован. Но я исправил его. У меня была ошибка внутри другой части моего кода. Яростно до сих пор не знаю, почему это прослушивало мой запрос. –

Смежные вопросы