Почему эта строка появляется только при запуске PHP на Windows, но не на CentOS?

Это беспокоит меня последние два (почти три) часа - и проявляется только на одной платформе.

Вот схема для таблицы SQL:

CREATE TABLE cache ( url                 TINYTEXT,
                     data                MEDIUMTEXT,
                     retrieval_timestamp INT,
                     ttl                 INT )

Теперь мой PHP-код использует драйвер SQLite PDO для создания файла базы данных на диске. Вышеприведенный оператор SQL выполняется, и таблица создается. Пока все хорошо - все мои тестовые машины успешно выполняют этот оператор.

Далее я вставляю данные в таблицу - и снова все машины вставляют данные без ошибок. Поскольку SQLite хранит базу данных в файле, я могу просто открыть его в SQLite Database Browser и убедиться, что данные вставлены.

Вот здесь-то и возникает проблема: Я не могу получить данные на машине CentOS под управлением PHP 5.2.

Вот код PHP, который я использую (имейте в виду, что он работает на PHP 5.3 под Windows):

$statement = $this->database->prepare('SELECT data FROM cache WHERE url = ? AND retrieval_timestamp + ttl >= ?');

$statement->bindValue(1, $url);
$statement->bindValue(2, time(), PDO::PARAM_INT);

$statement->execute();

На машине CentOS вышеприведенный код выполняется без ошибок. Но вместо ожидаемых строк (которые другие машины возвращают при точно таком же запросе) я не получаю ничего - никаких строк. Если я изменю SELECT data на SELECT data, retrieval_timestamp + ttl, я могу просмотреть результаты выражения и сравнить их с текущей временной меткой вручную - и данные действительно удовлетворяют условию, поэтому они должны быть возвращены в результатах.

Если я удалю вторую часть WHERE, ожидаемые данные будут возвращены, но, конечно, это противоречит цели таблицы :)

Что я делаю не так?


Обновление: все более странно - когда я использую query вместо prepare и указываю параметры вручную, все работает (на машине CentOS). Таким образом, похоже, что это проблема с подготовленными операторами.

Вот файл SQLite: http://dl.dropbox.com/u/31080052/test.sqlite
Вот запрос, который я выполняю на нем:

SELECT data FROM cache WHERE url = 'c' AND retrieval_timestamp + ttl >= 1326780275

9
задан Nathan Osman 17 January 2012 в 06:18
поделиться