php
  • mysql
  • 2013-05-17 3 views -1 likes 
    -1

    мне нужно Regex для поиска SQL, что-то вроде:REGEX помощь, SQL заявление

    "SELECT * FROM `words` WHERE `searchWord` REGEXP '$queryWord(\d{1,4})';" 
    

    , за исключением, что мне нужно включить '=' между частью $queryWord и (\d{1,4}), не совсем уверен в том, как это сделать?

    +0

    Полностью заслуженной downvote, это не конструктивно, я хорошо осведомлен о том –

    +0

    государственных Вашем вопросе более четко. Чего вы пытаетесь достичь? –

    +0

    поиск базы данных SQL для слова + до 4 чисел, слово переменной, также как и числа. В feilds будет выглядеть следующим образом картофель = 123 –

    ответ

    3

    Я не могу заставить \d вести себя, поэтому вместо этого использовал POSIX [:digit:]. Попробуйте следующее:

    SELECT * FROM `words` WHERE searchWord REGEXP '$queryWord=[[:digit:]]{1,4}' 
    

    Знак равенства не требует специальной обработки. В моих тестах он работал и не ускользнул.

    Вы также можете сделать:

    SELECT * FROM `words` WHERE searchWord REGEXP '$queryWord=[0-9]{1,4}' 
    

    Наконец, остерегайтесь интерполирования значений строки в запросах. Это может сделать вас уязвимыми для атак SQL Injection. См. here и множество других мест для получения дополнительной информации.

    +0

    Yours был один, который работал, спасибо кучу –

    +0

    I избегайте строки с mysqli_real_escape_string, и если вам интересно, что это не моя функция поиска, но первая из 2, скорее верните точное соответствие, используя это, а затем выполните поиск% LIKE% –

    +1

    Отлично, и не беспокойтесь :) Предупреждение SQL Injection было более или менее рефлексивным - в настоящее время стандартная практика StackOverflow предупреждает об этом, когда запрос MySQL создается путем добавления или интерполяции строк. –

    3

    Вам просто нужно избежать «=». Это должно работать:

    "SELECT * FROM `words` WHERE `searchWord` REGEXP '$queryWord\=\d{1,4}'"; 
    

    Обратите внимание на отсутствие группы захвата вокруг ваших номеров. Мы проверяем их, а не возвращаем.

    +0

    +1 @mkumpan для точки о захвате - я имел в виду, чтобы довести это до себя и забыл :) –

    1
    $query="SELECT * FROM `words` WHERE `searchWord` REGEXP '".$queryWord."\=\d{1,4}';" 
    

    Это будет работать.

    Вы должны быть осторожны, и убедитесь, что $ queryWord имеет только букву и нет специального символа, как точки, и т.д.

    Смежные вопросы