2010-01-11 4 views
0

J'ai la déclaration préparée suivant:l'ajout de paramètres à la clause LIMIT d'un SELECT

$sql = 
    "PREPARE stmt_name FROM 
    'SELECT I.item_id, I.name , I.price, I.discounted_price, I.thumbnail_photo 
    FROM item I 
    JOIN sub_category SC 
    ON I.sub_category_id = SC.sub_category_id 
    JOIN category C 
    ON C.category_id = SC.category_id 
    WHERE C.category_id = ? 
    LIMIT ?,? ' ; 

    SET @p1 = categoryId; 
    SET @p2 = firstItem; 
    SET @p3 = items_per_page; 

    EXECUTE stmt_name USING @p1,@p2,@p3; " 

qui je l'ai changé à ce qui suit (wihtout en utilisant la déclaration préparée)

$sql = 

    'SELECT I.item_id, I.name , I.price, I.discounted_price, I.thumbnail_photo 
    FROM item I 
    JOIN sub_category SC 
    ON I.sub_category_id = SC.sub_category_id 
    JOIN category C 
    ON C.category_id = SC.category_id 
    WHERE C.category_id =' . (int)$categoryId; 

Je veux ajouter des paramètres à la clause LIMIT Ive passé par certains sites, et il semble que l'ajout de paramètres à la clause LIMIT dans une instruction select peut se faire que par l'utilisation des instructions préparées. Puis-je avoir vos opinions et suggestions s'il vous plaît?

Merci!

+1

Juste curieux, pourquoi ne vous utilisez AOP? Vous ne devriez pas avoir besoin de préparer manuellement les déclarations à la main .. – ryeguy

+0

Je ne sais pas comment le faire en utilisant PDO. Pourriez-vous s'il vous plaît m'envoyer un lien à ce sujet? – chupinette

+0

http://www.php.net/manual/fr/pdo.prepare.php – ryeguy

Répondre

1

On dirait que vous utilisez concaténation, plutôt que de paramètres, pour construire votre nouvelle requête SELECT. Si vous souhaitez continuer sur cette route, vous auriez juste à votre code ajoutez:

. ' LIMIT ' . (int)$start . ', ' . (int)$number; 

Si vous préférez utiliser une requête paramétrées, vous devrez utiliser intégré dans PHP ou PDOmysqli extensions, ou choisissez une couche d'abstraction avec prise en charge des requêtes paramétrées telles que ADOdb. Les requêtes paramétrées sont souvent considérées comme plus sûres et plus propres que la simple création de requêtes via la concaténation de chaînes.

+0

Merci beaucoup pixOr! – chupinette

0

Je veux ajouter des paramètres à la limite clause Ive passé par certains sites, et il semble que l'ajout de paramètres à la clause LIMIT dans une instruction select peut se faire qu'à l'aide préparés déclarations.

ajouter donc la limite. Pourquoi une déclaration préparée ne permettrait-elle que des LIMITES? C'est une construction SQL pas une construction PHP.

0

Vous n'avez pas besoin d'utiliser des instructions préparées pour utiliser la limite. il suffit d'ajouter la limite ... par exemple

$sql='SELECT I.item_id, I.name , I.price, I.discounted_price, I.thumbnail_photo 
    FROM item I 
    JOIN sub_category SC 
    ON I.sub_category_id = SC.sub_category_id 
    JOIN category C 
    ON C.category_id = SC.category_id 
    WHERE C.category_id =' . (int)$categoryId.' LIMIT '.(int)$start.','.(int)$limit; 

http://dev.mysql.com/doc/refman/5.1/en/select.html

+0

Merci pour votre aide! – chupinette

Questions connexes