2015-08-20 2 views
0

Мой длинный опрос не работает:Bad PDO Выберите заявление

server.php

<?php 
require 'pdo.php'; 
set_time_limit(0); 
while (true) 
{ 

$requestedTimestamp = isset($_GET['timestamp']) ? (int)$_GET['timestamp'] : time(); 

    clearstatcache(); 

    $stmt = $pdo->prepare("SELECT * FROM publication WHERE publication_time > :requestedTimestamp"); 
    $stmt->bindParam(':requestedTimestamp', $requestedTimestamp); 
    $stmt->execute(); 
    $rows = $stmt->fetch(PDO::FETCH_ASSOC); 

if (count($rows) > 0) { 
$publication = $rows['publication']; 
$timestamp = strtotime($rows['publication_time']); 
$my = array('publication'=>$publication,'timestamp'=>$timestamp); 
$myJSON = json_encode($my); 
echo $myJSON; 
break; 


} else { 
    sleep(2); 
    continue; 
    } 

} 

?> 

Проблема дает мне головную боль: Независимую от $timestamp, результат я получил от SELECT, одно и то же, в случае, если я, мой последний $timestamp = 1439056820 (08/08/2015 15:00:20);

publication_time = timestamp field; 
+0

Пытались ли вы значительно иную метку времени (в диапазоне месяцы)? и какова разница во времени между последней и самой старой публикацией? –

+0

Пробная метка 2018 года, и результат тот же. –

ответ

0

Ваш код выглядит довольно хорошо для меня. вы пытались связать param как int?

$stmt->bindParam(':requestedTimestamp', $requestedTimestamp, PDO::PARAM_INT); 

Возможно, передав временную метку в виде строки, вы получаете какое-то странное поведение?

Edit: Так как у меня было больше времени, я тестировал код, и магия:

Предупреждение | 1292 | Неверное значение даты и времени: «1440162495» для столбца «расписание» в строке 1

Проблема не с PDO, а с тем, как вы передаете данные. Непосредственным решение для преобразования метки времени в действительную дату, так что-то в линиях:

$requestedTimestamp = isset($_GET['timestamp']) ? (int)$_GET['timestamp'] : time(); here 
//convert unixtime to iso date 
$requestedTimestamp = date('c', $requestedTimestamp); 
clearstatcache(); 

$stmt = $pdo->prepare("SELECT * FROM publication WHERE publication_time > :requestedTimestamp"); 
$stmt->bindParam(':requestedTimestamp', $requestedTimestamp); 
$stmt->execute(); 
$rows = $stmt->fetch(PDO::FETCH_ASSOC); 

Будем надеяться, что это будет прийти :)

+1

Не удалось :(, Выбрать продолжить показывать результаты с любой отметкой времени; –

+1

@MarleneOliveira Обновленный ответ, он должен действовать как ожидалось – Bolovsky

+0

Хорошо, я иду попробовать, когда мой дом, извините за плохой английский –