J'ai des problèmes pour faire correspondre les lignes de la base de données
P粉464208937
P粉464208937 2024-03-26 10:26:45
0
1
391

Je souhaite obtenir le nombre de lignes pour vérifier si le même email existe déjà dans la base de données. J'ai essayé plusieurs mécanismes sans succès. Lorsque j'exécute la requête directement dans la base de données, elle donne le nombre de lignes mais son exécution via PDO donne 0.

J'ai utilisé la méthode fetchAll pour compter manuellement et même l'utilisation de la méthode rowCount ne fonctionne pas

$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();

Le problème vient de ce $email_f, il contient du HTML

SELECT count(*) FROM inbox WHERE uid = "6961" 
AND from_email = "abc Offers <abc@abcs.com>"

C'est la requête que j'ai imprimée à partir de $sql et lorsque je l'exécute directement dans la base de données dans phpmyadmin, cela fonctionne bien. On me donne le chiffre 3, mais en exécutant j'obtiens 0.

P粉464208937
P粉464208937

répondre à tous(1)
P粉547170972

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, cela signifie qu'aucune ligne ne correspond aux critères. Vous devez donc découvrir pourquoi. Mais vous devez d'abord vous assurer que votre requête est correcte :

Problèmes causés par des erreurs SQL

Tout d'abord, vous devez vous assurer que votre requête s'exécute réellement sans erreur, car « aucun résultat » peut signifier qu'il y a une erreur dans la requête. Voir ces réponses pour plus de détails : pdo et mysqli.

Si l'erreur indique « Aucune table/base de données de ce type », veuillez consulter le cas « Connecter les informations d'identification » ci-dessous.

Problèmes causés par les conditions

Vérifiez vos conditions. Il existe des 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 d'accord, il n'y a aucune erreur, les conditions sont correctes et vous pourriez jurer que les données du tableau correspondent à votre requête. Il existe néanmoins quelques pièges :

Problèmes causés par les données

Tout d'abord, si une variable est impliquée, assurez-vous qu'elle existeet 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). Comme les sauts de ligne ou les symboles spécialement codés, ou encore certains caractères convertis en entités HTML, comme la fonction <>。因此,包含 <abc@abcs.com> 的查询永远不会匹配文本 <abc@abcs.com>。为了快速检查,您可以使用 rawurlencode(), qui convertit tous les caractères non latins en codes, les rendant ainsi visibles.

Le problème est que ce n'est qu'une supposition et personne ne peut vous dire quel est le problème réel car c'est votre base de données, vous entrez les données et seul vous pouvez trouver le problème.

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

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

  • Assurez-vous que le rapport d'erreurs complet est activé pour PDO et PHP. C'est vraiment utile et peut vous montrer les erreurs typographiques occasionnelles, les fautes d'orthographe, etc.
  • Vérifiez les données et les entrées dans la base de données pour trouver des écarts. La fonction urlencode() vous aidera, en affichant tous les caractères non imprimables et convertibles dans la base de données et la saisie.

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 à cette question, alors suivez simplement la même routine et vérifiez uniquement les lignes de données au lieu de la liste des tableaux.

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

C'est une situation rare, mais pour être sûr, suivez la liste de contrôle dans cette 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!