2010-02-25 8 views
4

Je suis un nouveau venu sur PDO et je dois dire que je l'aime jusqu'à présent mais je suis encore un peu instable sur certains des appels qu'il utilise et la documentation n'est pas si solide. J'utilise quelques procédures stockées et d'après ce que je comprends à propos de PDO, je suis obligé d'utiliser préparer pour cela. Je construis un module qui va stocker des informations sur les erreurs qui ont été causées par l'utilisateur. Je comprends que bindParam échappera à toutes les citations et nettoiera la chaîne avant qu'elle ne soit insérée dans la base de données, ce qui n'est PAS ce que je veux. Je veux voir la chaîne que l'utilisateur l'a saisie à des fins de dépannage. J'ai essayé de renoncer aux appels bindparam mais obtenir des erreurs sur la tentative de passer par référence. Y a-t-il un moyen de réaliser cela? Aussi ouvert aux suggestions. Merci.Clarification sur PDO et bindparam

Répondre

6

bindParam n'échappe pas ou ne «nettoie» rien en tant que tel. Il envoie la chaîne que vous lui fournissez directement dans la couche de base de données, verbatim. Tout caractère ' inclus dans la chaîne se terminera par un caractère ' dans la colonne de la base de données. C'est tout le point de paramétrage: il n'y a pas de «caractères spéciaux» à s'inquiéter.

Si vous rencontrez des problèmes pour passer des non-références à bindParam, je suggère d'utiliser bindValue à la place. En fait, je recommande fortement d'utiliser cet appel tout le temps, parce que le comportement de prise de référence de bindParam (et mysqli_stmt_bind_param) est confus et presque toujours indésirable.

+0

Merci! Je vais utiliser bindValue à la place. Je suis un peu confus ... J'avais la forte impression que lorsque je passais des fonctions mysql_ à PDO, je n'avais plus besoin de mysql_real_escape_string. S'il vous plaît dites-moi que PDO est en train de gérer cela pour moi déjà que j'ai lu au moins une demi-douzaine d'autres endroits. – jim

+0

@jim: Si une réponse a résolu votre problème, assurez-vous de cliquer sur la coche à côté de celle-ci afin que la personne qui a posté soit créditée :) – Matchu

+4

Oui, vous n'avez pas besoin de mysql_real_escape_string avec PDO. La valeur de chaîne va directement dans la couche de la base de données sans qu'il soit nécessaire d'être grossièrement épissée dans l'instruction SQL. Comme il n'est pas encadré dans un littéral de chaîne SQL, il n'est pas nécessaire d'échapper quoi que ce soit. – bobince

Questions connexes