Я пытался выяснить, как я могу сделать запрос с MySQL, который проверяет, $haystack
содержит ли значение (строка ) в определенном столбце определенные данные (строку $needle
), например так:
mysql_query("
SELECT *
FROM `table`
WHERE `column`.contains('{$needle}')
");
В PHP функция вызывается substr($haystack, $needle)
, поэтому возможно:
WHERE substr(`column`, '{$needle}')=1
php
mysql
sql
string-comparison
ярик
источник
источник
column LIKE '...'
регистра, сcolumn LIKE BINARY '...'
учетом регистраLIKE
предлагается проверить любую подстроку, так как этот оператор использует два символа подстановки:%
и_
. Это означает, что если ваша строка $ needle содержит один из этих специальных символов, тогда результаты будут совсем не такими, как ожидалось. (-1) для этого ответа и (+1) для ответа INSTR.Использование:
Ссылка:
источник
LIKE %...%
не будет использовать индекс, если он есть, поэтому он должен быть эквивалентным;LIKE ...%
будет использовать индекс, если присутствует. Если производительность является реальной проблемой, полнотекстовый поиск (FTS) будет лучшим подходом.like
оператором. Сinstr
такой фразой можно заказать вот такselect * from table order by instr(col1,"mystring")
источник
Мой использует
LOCATE
в MySQL:Эта функция является многобайтовой и чувствительна к регистру, только если хотя бы один аргумент является двоичной строкой.
В твоем случае:
источник
В дополнение к ответу от @WoLpH.
При использовании
LIKE
ключевого слова у вас также есть возможность ограничить направление совпадения строки. Например:Если вы искали строку, которая начинается с вашего
$needle
:Если вы искали строку, которая заканчивается на
$needle
:источник
знать, что это опасно:
сделай первым:
так что это предотвратит возможные атаки.
источник
mysql_real_escape_string
это будет устаревшим в будущих версиях PHP.$stmt = $dbh->prepare("Where 'column' LIKE '{:needle}'"); $stmt->bindParam(':needle', $needle); $stmt->execute();
Вы, вероятно, ищете
find_in_set
функцию:Эта функция действует как
in_array
функция в PHPисточник