Mysql
 sql >> Database >  >> RDS >> Mysql

Problemi con la corrispondenza delle righe nel database utilizzando PDO

Problemi causati dai dati

Molto probabilmente ci sono alcuni caratteri convertiti o non stampabili nei dati di input (o nel database). Ad esempio, potrebbe esserci un carattere di avanzamento riga o un simbolo codificato in modo particolare o alcuni caratteri come < e > convertito in entità HTML. Di conseguenza, la query contiene <[email protected]> non corrisponderà mai a un testo &lt;[email protected]&gt; .

Il problema è che questa è solo un'ipotesi e nessuno può dirti qual è il vero problema, perché è tuo database, tuo inserisci i dati e solo tu può trovare il problema.

Ho scritto un articolo che spiega come eseguire il debug dei problemi relativi ai PDO .

Per eseguire il debug di un problema particolare, è necessario

  • assicurati che la segnalazione completa degli errori sia abilitata sia per PDO che per PHP. È davvero d'aiuto, mostrandoti errori tipografici occasionali, errori di ortografia e simili
  • scruta sia i dati nel database che l'input per trovare la differenza. bin2hex() la funzione aiuterebbe, rivelando tutti i caratteri non stampabili e convertiti, sia nel database che nell'input.

Problemi causati dalle credenziali di connessione

Un altro problema frequente è quando si hanno più database e ci si connette a quello sbagliato che non ha i dati richiesti. Questo problema è simile a questo , quindi segui la stessa routine, controllando solo non l'elenco delle tabelle ma le righe di dati.

Una nota irrilevante ma importante

Nota a margine, ma comunque molto importante:la tua dichiarazione preparata è un codice di culto del carico che non protegge nulla . Ecco come deve essere:

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