Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Problem mit übereinstimmenden Zeilen in der Datenbank mit PDO

Durch die Daten verursachte Probleme

Höchstwahrscheinlich gibt es einige konvertierte oder nicht druckbare Zeichen in den Eingabedaten (oder der Datenbank). Beispielsweise könnte es sich um ein Zeilenvorschubzeichen oder ein speziell codiertes Symbol oder einige Zeichen wie < handeln und > in HTML-Entitäten umgewandelt. Als Ergebnis enthält die Abfrage <[email protected]> stimmt niemals mit einem Text &lt;[email protected]&gt; .

Das Problem ist, dass dies nur eine Vermutung ist und niemand Ihnen sagen kann, was das eigentliche Problem ist, da es Ihre ist Datenbank, Ihre Eingabedaten und nur Sie kann das Problem finden.

Ich habe einen Artikel geschrieben, der erklärt, wie Sie Ihre PDO-Probleme debuggen .

Um ein bestimmtes Problem zu debuggen, benötigen Sie

  • Stellen Sie sicher, dass die vollständige Fehlerberichterstattung sowohl für PDO als auch für PHP aktiviert ist. Es hilft wirklich und zeigt Ihnen gelegentliche typografische Fehler, Rechtschreibfehler und dergleichen
  • untersuchen Sie sowohl die Daten in der Datenbank als auch die Eingabe, um den Unterschied zu finden. bin2hex() Funktion würde helfen, alle nicht druckbaren und konvertierten Zeichen sowohl in der Datenbank als auch in der Eingabe aufzudecken.

Probleme, die durch die Verbindungsdaten verursacht werden

Ein weiteres häufiges Problem ist, wenn Sie mehrere Datenbanken haben und sich mit der falschen verbinden, die die angeforderten Daten nicht enthält. Dieses Problem ähnelt diesem , folgen Sie also einfach der gleichen Routine, prüfen Sie nur nicht die Tabellenliste, sondern die Datenzeilen.

Ein irrelevanter, aber wichtiger Hinweis

Nebenbei bemerkt, aber trotzdem sehr wichtig:Ihr vorbereitetes Statement ist ein Cargo-Cult-Code das nichts schützt . Hier ist, wie es muss sein:

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