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 ...
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. –
utilisez-vous PDO_SQLITE? – hobodave
oui, j'utilise l'extension pdo sqlite pour sqlite3. –