8
votes

Limite de PDO et compensation

Dupliqué possible:
Bindvalue PHP PDO dans limite

Je ne pouvais pas afficher les données lors de l'utilisation de limites et / ou de décalage dans la déclaration de préparation, mais je peux montrer "Lei Lei" si je n'utilise pas la limite et le décalage, le code a-t-il un problème? xxx

Ceci a été modifié du code d'origine qui a fonctionné: xxx


2 commentaires

Toute raison que vous exécutez $ Compteour-> Execute () deux fois? Et utilisez-vous l'instruction $-> FETCH () ou ÉMARGE-$-> FETCHALL () Après avoir exécuté pour récupérer les résultats?


Mettez à jour mon message, j'utilise $ déclaration-> Fetch ()


3 Réponses :


1
votes

EDIT: Correction

$statement = $conn->prepare("SELECT id,username FROM public2 WHERE username = :name LIMIT :limit OFFSET :offset");
$name = "Lei Lei";
$statement->bindValue(':name', $name);
$statement->bindValue(':limit', (int) $start, PDO::PARAM_INT);
$statement->bindValue(':offset', (int) $per_page, PDO::PARAM_INT);
$statement->execute();


7 commentaires

@ Proyb2 Essayez sans le décalage comme dans votre requête d'origine: Sélectionnez ID, nom d'utilisateur à partir de Public2 Où USERNAME =: Nom limite $ Démarrage, $ per_page


Je vois, alors comment puis-je ajouter la limite dans la déclaration de préparation?


J'ai trouvé la réponse! € déclaration-> Bindvalue (': STA1', (int) $ Démarrage, PDO :: PARAM_INT); travaille-t-il


Vous avez tort. Faire cela est contre l'idée des déclarations préparées


@Col totalement d'accord, n'a pas réalisé que la limite a été prise en charge


Les déclarations limites peuvent certainement faire partie d'une déclaration préparée, les valeurs doivent simplement être liées en tant qu'étais entiers.


Déteste Necro un thread ... Mais la version éditée lie les paramètres aux mauvais noms ... Compte tenu des paramètres de l'instruction SQL "... LIMITE: Compensation de la limite: Décalage" Vous devez être contraignant $ START à compenser et $ per_page à limiter



22
votes

J'ai trouvé la réponse! xxx

fonctionne


1 commentaires

Merci. Je me demandais pourquoi ma limite: le nombre ne fonctionnait pas. On dirait que c'était être lancé comme une chaîne.



8
votes
$dbh->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );
will let you bind variables without being bothered of them type 

2 commentaires

Pourquoi voudriez-vous même faire cela lors de l'ajout de PDO :: param_int après que l'appel fonctionne?


Cela vous permet également d'utiliser une liaison normale de la matrice plutôt que de faire de l'instruction $-> Bindvalue. +1