2009-07-21 3 views
4

У меня есть запрос, который запускается 1000s раз, которое я пытаюсь оптимизировать, используя подготовленные заявления:SQLite - ограничение? Ошибка? Подготовленные отчеты с предложения HAVING

$query = "SELECT day, ticker, SUM(score*mod) as shares FROM indicators, modifiers WHERE indicators.dex=modifiers.dex AND ticker='$t' GROUP BY day, ticker HAVING shares>=$s"; 

При запуске запроса обычно:

$transactions = $dbm->query($query); 

I получить желаемый набор результатов.

Однако, когда я преобразовать его в подготовленное заявление

$stmt = $db->prepare("SELECT day, ticker, SUM(score*mod) as shares FROM indicators, modifiers WHERE indicators.dex=modifiers.dex AND ticker=? GROUP BY day, ticker HAVING shares>=?"); 

и запустить:

$stmt->execute(array($t, 100)); 

кажется, что она не в состоянии отфильтровать условия, указанные в предложениях HAVING (так я получить результаты, когда акции составляют менее 100).

Является ли это ошибкой/ограничением SQLite или я что-то не так?

Все мои другие запросы отлично работает при преобразовании в подготовленных инструкций ...

+2

Я также пробовал жестко кодировать количество акций в подготовленный оператор, и он работал нормально. Это происходит только тогда, когда переменная. – 2009-07-21 21:19:06

+0

Вы используете PDO_SQLITE? – hobodave

+0

да, я использую расширение sqlite pdo для sqlite3. – 2009-07-21 21:27:18

ответ

1

Try: $ stmt-> bindParam (2, $ акций, PDO :: PARAM_INT); $ stmt-> execute();

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