Aquí está mi intento de hacerlo:
$query = $database->prepare('SELECT * FROM table WHERE column LIKE "?%"');
$query->execute(array('value'));
while ($results = $query->fetch())
{
echo $results['column'];
}
Lo descubrí justo después de publicar:
$query = $database->prepare('SELECT * FROM table WHERE column LIKE ?');
$query->execute(array('value%'));
while ($results = $query->fetch())
{
echo $results['column'];
}
like
se usa múltiple ? ¿Cómo debería ejecutarse la matriz de ejecución en orden?Para aquellos que usan parámetros con nombre, aquí se explica cómo usar
LIKE
con%
coincidencia parcial para bases de datos MySQL :donde está el parámetro nombrado
:dangerousstring
.En otras palabras, use
%
signos explícitamente sin escape en su propia consulta que estén separados y definitivamente no sean la entrada del usuario.Editar: la sintaxis de concatenación para bases de datos Oracle usa el operador de concatenación:,
||
por lo que simplemente se convertirá en:Sin embargo, hay advertencias como @bobince menciona aquí que:
Entonces, eso es algo más a tener en cuenta al combinar Me gusta y parametrización.
fuente
LIKE CONCAT('%', :something, '%')
. Referencia: stackoverflow.com/a/661207/201648SELECT * FROM calculation WHERE ( email LIKE '%' || luza || '%' OR siteLocation LIKE '%'|| luza ||'%' OR company LIKE '%' ||luza ||'%' )
esto me daría un error.and it means named placeholders can be used
. ¿Cómo es incluso un problema con los marcadores de posición con nombre cuando concatenas en PHP? Obviamente, la concatenación en PHP admite tanto el nombre como el posicional y es más portátil, ya que puede usar la misma consulta para cualquier base de datos. Realmente no entiendo por qué tanta gente piensa que existe alguna diferencia entre los marcadores de posición con nombre y posicionales.fuente
bindValue
protege contra los ataques de inyección? La respuesta aceptada básicamente niega el valor de usar?
marcadores de posición al concatenar la cadena de búsqueda a Me%
gusta en los días de antaño.También puedes probar este. Me enfrento a un problema similar pero obtuve un resultado después de la investigación.
fuente
Esto funciona:
fuente
Obtuve esto de php delirios
Y funciona para mí, muy simple. Como él dice, primero debes "preparar nuestro literal completo" antes de enviarlo a la consulta.
fuente
PDO escapa "%" (puede conducir a una inyección de sql) : el uso del código anterior dará los resultados deseados al buscar coincidencias con cadenas parciales, PERO si un visitante escribe el carácter "%", aún obtendrá resultados incluso si no lo hace t tener algo almacenado en la base de datos (puede dar lugar a inyecciones de sql)
Probé muchas variaciones, todas con el mismo resultado. PDO está escapando "%" de los principales resultados de búsqueda no deseados / no emocionados.
Pensé que valía la pena compartirlo si alguien ha encontrado una palabra al respecto, por favor compártelo
fuente