Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Tendo problemas com linhas correspondentes no banco de dados usando PDO

Problemas causados ​​pelos dados


Muito provavelmente existem alguns caracteres convertidos ou não imprimíveis nos dados de entrada (ou banco de dados). Por exemplo, pode haver um caractere de avanço de linha ou um símbolo codificado peculiarmente, ou alguns caracteres como < e > convertidos em entidades HTML. Como resultado, a consulta contém <[email protected]> nunca corresponderá a um texto &lt;[email protected]&gt; .

O problema é que isso é apenas um palpite e ninguém pode dizer qual é o problema real, porque é seu banco de dados, seu dados de entrada e apenas você pode encontrar o problema.

Eu escrevi um artigo que explica como depurar seus problemas de PDO .

Para depurar um problema específico, você precisa
  • certifique-se de que o relatório completo de erros esteja habilitado para PDO e PHP. Isso realmente ajuda, mostrando erros tipográficos ocasionais, erros de ortografia e afins
  • examine os dados no banco de dados e a entrada para encontrar a diferença. bin2hex() A função ajudaria, revelando todos os caracteres não imprimíveis e convertidos, tanto no banco de dados quanto na entrada.

Problemas causados ​​pelas credenciais de conexão


Outro problema frequente é quando você tem vários bancos de dados e se conecta ao errado que não possui os dados solicitados. Este problema é semelhante a este , então siga a mesma rotina, apenas verificando não a lista de tabelas, mas as linhas de dados.

Uma observação irrelevante, mas importante


Em uma nota lateral, mas muito importante:sua declaração preparada é um código de culto de carga que não protege nada . Veja como deve ser:
$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();