Nous avons rencontré un problème de correspondance des lignes dans la base de données.
P粉005105443
P粉005105443 2023-07-25 10:47:08
0
1
446
<p>Je souhaite obtenir le nombre de lignes pour vérifier si le même e-mail existe déjà dans la base de données. J'ai essayé plusieurs méthodes sans succès. Lorsque j'exécute la requête directement dans la base de données, elle me renvoie le nombre de lignes, mais via la méthode d'exécution de PDO, elle renvoie 0. </p> <p>J'ai essayé de compter manuellement à l'aide de la méthode fetchAll et j'ai même utilisé la méthode rowCount, mais aucune n'a fonctionné. </p> <pre class="brush:php;toolbar:false;">$sql = 'SELECT count(*) FROM inbox WHERE uid = ? AND from_email = ?'; $result = $link->prepare($sql); $result->execute([$email_number,$email_f]); $number_of_rows = $result->fetchColumn();</pre> <p>Le problème réside dans la variable $email_f, qui contient du code HTML. </p> <pre class="brush:php;toolbar:false;">SELECT count(*) FROM inbox WHERE uid = "6961" AND from_email = "Offres abc <abc@abcs.com>"</pre> <p>Il s'agit de l'instruction de requête que j'ai imprimée à partir de $sql. Lorsque je l'exécute directement dans phpMyAdmin, elle fonctionne correctement et renvoie 3 lignes, mais via la méthode d'exécution, elle renvoie 0. </p>
P粉005105443
P粉005105443

répondre à tous(1)
P粉237689596

Tout d'abord, vous devez accepter le fait que si votre requête ne trouve aucune ligne, cela signifie qu'il n'y a pas de correspondance, même si vous pouvez jurer que les données sont correctes. Lorsqu'une requête ne renvoie aucune ligne, aucune ligne ne correspond aux critères. Par conséquent, vous devez découvrir pourquoi. Mais d'abord, vous devez vous assurer que votre requête est correcte :

Problèmes causés par des erreurs SQL

Tout d'abord, vous devez vous assurer qu'il n'y a réellement aucune erreur dans la requête, car "aucun résultat" peut signifier qu'il y a une erreur dans la requête. Veuillez vous référer aux réponses suivantes pour plus de détails : pdo et mysqli.

Problèmes causés par les conditions

Vérifiez vos conditions. Il existe certaines conditions mutuellement exclusives, telles que WHERE col=1 AND col=2. Il ne renvoie jamais de lignes. Essayez de simplifier la condition jusqu'à ce qu'elle commence à renvoyer certaines lignes, puis affinez la condition pour obtenir les résultats souhaités.


Mais bon, il n'y a pas d'erreurs, les conditions sont correctes et vous pourriez jurer qu'il y a des données dans le tableau qui correspondent à votre requête. Cependant, il reste encore quelques écueils :

Problèmes causés par les données

Tout d'abord, lorsque des variables sont impliquées, assurez-vous que la variable existe et contient réellement une valeur.

Vérifiez ensuite la valeur elle-même. Il peut y avoir des caractères convertis ou non imprimables dans les données d'entrée (ou la base de données). Par exemple, les sauts de ligne ou les symboles spécialement codés, ou certains caractères tels que < et > Par conséquent, la requête de texte contenant <abc@abcs.com> ne correspondra jamais au texte <abc@abcs.com>. Vous pouvez effectuer une vérification rapide en utilisant la fonction rawurlencode(), qui convertira tous les caractères non latins en codes, les rendant visibles.

Le problème est qu'il ne s'agit que d'une supposition et que personne ne peut vous dire quel est le problème réel car il s'agit de votre base de données, de vos données d'entrée et vous seul pouvez trouver le problème.

J'ai écrit un article expliquant comment déboguer vos problèmes PDO.

Pour déboguer un problème spécifique dont vous avez besoin :

  • Assurez-vous d'activer le rapport d'erreurs complet pour PDO et PHP. Ceci est vraiment utile et peut vous montrer des erreurs typographiques occasionnelles, des fautes d’orthographe, etc.
  • Vérifiez les données de la base de données et les données d'entrée pour trouver les différences. La fonction urlencode() vous aidera, elle peut afficher tous les caractères non imprimables et convertis dans la base de données et les données d'entrée.

Problèmes causés par les informations de connexion

Un autre problème courant survient lorsque vous disposez de plusieurs bases de données et que vous vous connectez à la mauvaise base de données, qui ne contient pas les données demandées. Cette question est similaire à la précédente, suivez donc simplement les mêmes étapes, sauf qu'au lieu de vérifier la liste des tables, vous vérifiez les lignes de données.

Problèmes causés par le jeu de caractères/encodage

C'est un cas rare mais juste pour être sûr, suivez ceci Excellente réponse

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!