Problemy spowodowane danymi
Najprawdopodobniej w danych wejściowych (lub w bazie danych) znajdują się przekonwertowane lub niedrukowalne znaki. Na przykład może to być znak wysuwu wiersza lub specyficznie zakodowany symbol, lub niektóre znaki, takie jak <
i > konwertowane na jednostki HTML. W rezultacie zapytanie zawiera
<[email protected]
> nigdy nie będzie pasować do tekstu
<[email protected]
>
.
Problem polega na tym, że to tylko przypuszczenie i nikt nie może ci powiedzieć, jaki jest rzeczywisty problem, ponieważ jest Twój baza danych, Twoja dane wejściowe i tylko ty może znaleźć problem.
Napisałem artykuł, który wyjaśnia jak debugować problemy z PDO .
Aby debugować konkretny problem, potrzebujesz
- upewnij się, że pełne raportowanie błędów jest włączone zarówno dla PDO, jak i PHP. To naprawdę pomaga, pokazując sporadyczne błędy typograficzne, błędy ortograficzne i tym podobne
- przeanalizuj zarówno dane w bazie danych, jak i dane wejściowe, aby znaleźć różnicę.
bin2hex()
funkcja pomogłaby, ujawniając wszystkie niedrukowalne i przekonwertowane znaki, zarówno w bazie danych, jak i danych wejściowych.
Problemy spowodowane danymi uwierzytelniającymi połączenie
Innym częstym problemem jest sytuacja, gdy masz kilka baz danych i łączysz się z niewłaściwą, która nie zawiera żądanych danych. Ten problem jest podobny do tego , więc po prostu postępuj zgodnie z tą samą procedurą, sprawdzając tylko nie listę tabel, ale wiersze danych.
Nieistotna, ale ważna uwaga
Na marginesie, ale bardzo ważne:przygotowane oświadczenie to kultowy kod ładunku który nic nie chroni . Oto jak to musi być:
$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();