Tener problemas con filas coincidentes en la base de datos

Resuelto khattak asked hace 54 años • 1 respuestas

Estoy buscando obtener el recuento de filas para verificar si el mismo correo electrónico ya está en la base de datos o no. Probé un par de mecanismos pero no tuve éxito. cuando ejecuto mi consulta directamente en la base de datos, me da el recuento de filas, pero mediante la ejecución de PDO me da 0.

He usado el método fetchAll para contar manualmente, incluso usé el método rowCount que tampoco funciona

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

El problema es con este $email_f, contiene html.

SELECT count(*) FROM inbox WHERE uid = "6961" 
AND from_email = "abc Offers <[email protected]>"

esta es la consulta que imprimí desde $sql y cuando la ejecuto en la base de datos directamente en phpmyadmin, funciona bien. dame la cuenta de 3 pero al ejecutar me sale 0.

khattak avatar Jan 01 '70 08:01 khattak
Aceptado

En primer lugar, debe aceptar el hecho: si su consulta no encontró filas, significa que no hay coincidencia, incluso si puede jurar que los datos están bien. Cuando la consulta no devuelve filas, entonces no hay filas que coincidan con la condición. Entonces tienes que descubrir por qué. Pero antes que nada debes asegurarte de que tu consulta esté bien:

Problemas causados ​​por errores de SQL

En primer lugar, debe asegurarse de que su consulta realmente se ejecute sin errores, ya que "sin resultado" podría significar un error en la consulta. Consulte estas respuestas para obtener más detalles: pdo y mysqli .

En caso de que el error diga "no existe tal tabla/base de datos", consulte el caso "credenciales de conexión" a continuación.

Problemas causados ​​por la condición.

Consulta tus condiciones. Existen condiciones mutuamente excluyentes, como WHERE col=1 AND col=2. Nunca devolverá ninguna fila. Intente simplificar la condición hasta que comience a devolver algunas filas y luego refine las condiciones para obtener el resultado deseado.


Pero está bien, no hay errores, las condiciones son correctas y puede jurar que hay datos en la tabla que coinciden con su consulta. Aun así, existen algunos inconvenientes:

Problemas causados ​​por los datos.

En primer lugar, en caso de que haya una variable involucrada, asegúrese de que exista y que realmente contenga algún valor.

Luego verifique el valor en sí. Podría haber algunos caracteres convertidos o no imprimibles en los datos de entrada (o base de datos). Por ejemplo, un carácter de salto de línea o un símbolo codificado de forma peculiar, o algunos caracteres como <y >convertidos en entidades HTML. Como resultado, la consulta que contiene <[email protected]>nunca coincidirá con un texto &lt;[email protected]&gt;. Para una verificación rápida, puede usar rawurlencode()la función, que convertirá todos los caracteres no latinos en códigos, haciéndolos visibles.

El problema es que esto es sólo una suposición y nadie puede decirle cuál es el problema real, porque es su base de datos, sus datos de entrada y solo usted puede encontrar el problema.

Escribí un artículo que explica cómo depurar sus problemas de PDO .

Para depurar un problema en particular, necesita

  • asegúrese de que el informe de errores completo esté habilitado tanto para PDO como para PHP. Realmente ayuda, mostrándote errores tipográficos ocasionales, errores ortográficos y demás.
  • Examine tanto los datos en la base de datos como la entrada para encontrar la diferencia. urlencode()La función ayudaría, revelando todos los caracteres convertidos y no imprimibles, tanto en la base de datos como en la entrada.

Problemas causados ​​por las credenciales de conexión.

Otro problema frecuente es cuando tienes varias bases de datos y te conectas a una incorrecta que no tiene los datos solicitados. Este problema es similar a este , así que simplemente siga la misma rutina, solo verificando no la lista de tablas sino las filas de datos.

Problemas causados ​​por el juego de caracteres/codificación

Es un caso raro, pero para estar seguro, siga la lista de verificación de esta excelente respuesta .

Your Common Sense avatar Sep 18 '2019 06:09 Your Common Sense