He estado tratando de descubrir cómo puedo hacer una consulta con MySQL que verifique si el valor (cadena $haystack) en una determinada columna contiene ciertos datos (cadena $needle), como este:
mysql_query("
SELECT *
FROM `table`
WHERE `column`.contains('{$needle}')
");
En PHP, la función se llama substr($haystack, $needle), así que tal vez:
WHERE substr(`column`, '{$needle}')=1
php
mysql
sql
string-comparison
arik
fuente
fuente

column LIKE '...'mayúsculas y minúsculas, concolumn LIKE BINARY '...'mayúsculas y minúsculasLIKEse proponga verificar cualquier subcadena ya que este operador utiliza dos caracteres comodín:%y_. Esto significa que si su cadena $ needle contiene uno de estos caracteres especiales, los resultados no son los esperados. (-1) para esta respuesta y (+1) para la respuesta INSTR.Utilizar:
Referencia:
fuente
LIKE %...%no usará un índice si hay uno presente, por lo que deberían ser equivalentes;LIKE ...%usaría un índice si está presente. Si el rendimiento es una preocupación real, la búsqueda de texto completo (FTS) sería un mejor enfoque.likeoperador. Coninstruna frase se puede ordenar asíselect * from table order by instr(col1,"mystring")fuente
El mío está usando
LOCATEen mysql:Esta función es segura para varios bytes y distingue entre mayúsculas y minúsculas solo si al menos un argumento es una cadena binaria.
En tu caso:
fuente
Además de la respuesta de @WoLpH.
Al usar la
LIKEpalabra clave, también tiene la capacidad de limitar en qué dirección coincide la cadena. Por ejemplo:Si estabas buscando una cadena que comience con tu
$needle:Si estabas buscando una cadena que termina con
$needle:fuente
Tenga en cuenta que esto es peligroso:
hacer primero:
así evitará posibles ataques.
fuente
mysql_real_escape_stringquedará en desuso en futuras versiones de PHP.$stmt = $dbh->prepare("Where 'column' LIKE '{:needle}'"); $stmt->bindParam(':needle', $needle); $stmt->execute();Probablemente estés buscando la
find_in_setfunción:Esta función actúa como
in_arrayfunción en PHPfuente