2009-07-21 4 views
4

J'ai une requête exécutée 1000s de fois que je suis en train d'optimiser l'utilisation des instructions préparées:SQLite - Limitation? Punaise? Déclarations préparées avec 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"; 

Quand je lance la requête normalement:

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

I obtenir le jeu de résultats souhaité.

Cependant, quand je le convertir en une déclaration préparée

$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>=?"); 

et lancez:

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

il semble qu'il est incapable de filtrer la condition énoncée dans la clause HAVING (donc je obtenir des résultats lorsque les actions sont inférieures à 100).

Est-ce un bug/une limitation à SQLite ou est-ce que je fais quelque chose de mal?

Toutes mes autres requêtes fonctionnent bien lorsqu'elles sont converties en commandes préparées ...

+2

J'ai également essayé de coder en dur le nombre de partages dans l'instruction préparée et cela a fonctionné correctement. Cela arrive seulement quand c'est une variable. –

+0

utilisez-vous PDO_SQLITE? – hobodave

+0

oui, j'utilise l'extension pdo sqlite pour sqlite3. –

Répondre

1

Essayez: $ stmt-> bindParam (2, parts $, PDO :: PARAM_INT); $ stmt-> execute();

Questions connexes