Declaración preparada de PDO en PHP: problemas con consultas LIKE de MySQL
La clase PDO de PHP con MySQL ofrece un mecanismo para ejecutar declaraciones SQL con consultas parametrizadas , mejorando la seguridad y el rendimiento. Sin embargo, los usuarios pueden encontrar dificultades al utilizar consultas LIKE.
Problema: la declaración preparada de PDO no devuelve resultados con la consulta LIKE
Al intentar ejecutar una consulta similar a la siguiente usando PDO:
SELECT *
FROM hs
WHERE hs_text LIKE "%searchTerm%"
Los usuarios pueden encontrar que no se devuelven resultados.
Solución: parametrización correcta
El problema radica en el Parametrización incorrecta del término de búsqueda. En PHP, las declaraciones preparadas utilizan marcadores de posición con nombre, que requieren una sintaxis diferente. La parametrización correcta para la consulta LIKE es:
$prep = $dbh->prepare($sql);
$ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));
Explicación:
Las declaraciones preparadas separan los datos de la consulta y utilizan marcadores de posición. Por lo tanto, no es necesario encerrar el término de búsqueda entre comillas dobles ni realizar una concatenación de cadenas.
Otros errores comunes:
WHERE hs_text LIKE :searchTerm
$ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"')); // Incorrect
WHERE hs_text LIKE CONCAT(\'%\', ?, \'%\')
$ret = $prep->execute(array($searchTerm)); // Incorrect
Al usar la parametrización correcta, puede ejecutar con éxito consultas LIKE usando PDO preparó declaraciones en PHP.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3