Запрос фразы с более чем одним пробелом ничего не возвращает - PullRequest
0 голосов
/ 14 августа 2011

У меня есть поисковая форма, в которой пользователь должен ввести слово. До сих пор это работает просто отлично, но когда я ввожу слово с двумя или более пробелами, запрос не возвращает ничего (пусто).

    $search = $_POST['srch'];

    if (!$search == "")
    {
    $con = mysql_connect('nnnnn', 'nnnnn', 'nnnn');
    if (!$con)
      {
      die('Could not connect: ' . mysql_error());
      }
    mysql_select_db("nnnnnnn", $con);
    $search = mysql_real_escape_string($search);

    $sql = "SELECT * FROM `computers` WHERE `MODEL` REGEXP '$search|$search\$' OR
    `DESCR`\n"
        . "REGEXP '^$search|$search\$' LIMIT 0, 30 ";
    // here check if there is any content
if (mysql_fetch_array($result))

{

while($row = mysql_fetch_array($result))

{// here just echoing the returned content 

}

}else echo "not found";

    }echo "enter a word"! ;

Так что, если я, например, введу core 2, то все результаты совпадений будут повторены.

Но если я напишу core 2 dou, он ничего не вернет, даже «Ошибка не найдена».

Как я могу это исправить?

Я попробовал PHPMyAdmin, заменив $search

и возвращаемый запрос совпадает даже с core 2 dou и даже с добавлением беспорядочных слов, таких как

core 2 dou computers

Я уверен, что проблема в способе PHP отправить запрос или обработать его, я просто не могу понять это

Ответы [ 2 ]

1 голос
/ 14 августа 2011

Вам необходимо заключить шаблон в кавычки.В то время как у вас есть

"... REGEXP ^$search|$search\$ ..."

Вам необходимо иметь

"... REGEXP \"^$search|$search\$\" ..."

Кроме того, вы должны избегать $search хотя бы с помощью mysql_real_escape_string, если вы не хотите, чтобы посетители сайта могли запустить случайный SQL для вашей базы данных .

0 голосов
/ 14 августа 2011

Поскольку вы сказали, что любая помощь будет полезна, если вы просто хотите найти строку, проще использовать LIKE вместо REGEXP, например,

MODEL LIKE '%$search%'

также, я не уверен, почему вы повторяете поиск $, разделенный '|'

кстати, если проблема в нескольких пробелах, их легко заменить одним пробелом, например так:

$search = implode(' ', preg_split("/\s+/", $search));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...