2011-07-06 1 views
2

Je rencontre un problème lorsque PDO encapsule des valeurs int à l'aide de guillemets et par la suite rend les requêtes échouées.Problème lors du passage de PDO :: PARAM_INT à l'aide d'un tableau de valeurs d'insertion

Voici le code (en utilisant une fonction d'emballage)

$newest = query("SELECT id, body, upvotes, downvotes 
       FROM suggestions ORDER BY timestamp DESC LIMIT :min, :max", 
    array(
     ':min' => $min, 
     ':max' => $max 
    ) 
); 

Et ceci est la requête mauvaise résultante qui provoque une erreur (notez les guillemets autour des LIMIT valeurs)

SELECT id, body, upvotes, downvotes FROM suggestions ORDER BY timestamp DESC LIMIT '0' , '50' 

Je m passant un tableau de valeurs:

array(
    ':min' => $min, 
    ':max' => $max 
) 

Ils sont tous deux INT, et de ce que je lire sur Internet PDO devrait automatiquement trouver et utiliser PDO::PARAM_INT lors de leur liaison. Le problème est qu'il ne fait pas réellement cela, et puisque mon seul moyen de les passer est à travers un tableau, je voudrais demander s'il y a un moyen de les forcer à PDO::PARAM_INT sans avoir à utiliser bindParam().

Merci d'avance.

+0

aussi pourquoi votre seul moyen est de tableau? – dynamic

+0

C'est parce que j'utilise une fonction wrapper, et que la fonction wrapper n'autorise que des tableaux –

+0

Y a-t-il un problème pour vous si vous utilisez uniquement cette classe de PDO standard? (ce n'est pas la meilleure idée) – dynamic

Répondre

1

Si vous utilisez un emballage et vous ne pouvez pas utiliser bindParam alors vous pouvez faire:

$min=(int)$min; 
$max=(int)$max; 
query("SELECT id, body, upvotes, downvotes 
       FROM suggestions ORDER BY timestamp DESC LIMIT $min, $max"); 

Ce n'est pas la meilleure idée. Si vous voulez garder des normes, vous devriez améliorer votre emballage pour gérer de tels cas.

Comme un 3ème dans votre emballage param

function query($q,$paramArray,$bindParamArray) {} 

Vous pouvez donc utiliser efficacement bindParam trop

+0

Merci, il a corrigé l'erreur mais, maintenant la requête renvoie un résultat vide. C'est étrange car l'exécution de la même requête depuis PHPMyAdmin donne un résultat valide (pas vide). Existe-t-il un moyen de voir la requête qui a fini par être exécutée à l'aide de PDO? –

+0

getLastQuery(); aussi google est votre ami – dynamic

+0

Nevermind! C'était juste un petit problème de mon côté. Remplacer les valeurs directement dans la chaîne a bien fonctionné. Merci beaucoup. –

Questions connexes