1. нет не поможет, будет искать только целиком строку или слово. (Например если ищим "вперед назад" то система выдаст предложение "Ваня прыгал вперед назад и вниз" и пропустит "А Коля прыгал назад вперед" )
2.
Код:
$search = htmlspecialchars($_REQUEST['ИСКОМЫЙ ТЕКСТ']);
if (preg_match("/[^(\w)|(\x7F-\xFF)|(\s)-]/",$search)) $search="";
SELECT * FROM [b]таблица[/b] WHERE [b]где[/b] like '%".str_replace("*","%",addslashes($search))."%'
Ну в общем это какие советы будут, как написать то лучше чтобы поиск был?
1. не поможет так не поможет
2. понятно. А как в запрос попадают имена таблиц и поля?
3. Советы.
для начала нужно определиться с тем, каким должен быть поиск, потом уже прикидывать то, во что выльется реализация того, чего нужно. Следующий пункт - найти приемлемый компромисс между тем что нужно, и тем во что это обойдется.
Конкретно к твоему случаю, когда критерий прост (выражается лишь с помощью одного LIKE), советы такие:
15 таблиц это не тот случай, когда тяжело скопипастить код 15 раз. Но беда здесь кроется в том, что усложнится поддержка. Т.е. чтобы доработать поиск, придется исправлять в 15 местах. Потому, с одной стороны лучше перейти к генерации SQL.
С другой стороны, вероятно 15 таблиц потребуют 15 различных способов обработки результатов запроса (здесь я полагаю, что нужно не только найти искомый текст, но и уметь показать его пользователю, т.е. сгенерировать URL перехода или что-то вроде). В одном случае потребуется имя пользователя (для показа страницы о пользователе), в другом - идентификатор темы, в которой помещен комментарий, а возможно и идентификатор темы + идентификатор комментария.
Т.е. либо придется генерировать монстра в виде
Код:
(SELECT "user_name", user_id, NULL, NULL FROM users WHERE user_name LIKE ...)
UNION
(SELECT "user_sex", user_id, NULL, NULL FROM users WHERE user_sex LIKE ...)
UNION
(SELECT "user_address", user_id, NULL, NULL FROM users WHERE user_address LIKE ...)
...
(SELECT "message_text", NULL, forum_id, message_id FROM messages WHERE message_text LIKE ...)
и организовывать диспетчеризацию строк результата по первой колонке для генерации URL-а, либо вообще выполнять запросы отдельно.
Ну а если отдельно - то какой смысл в генерации? Если бы речь шла о 150 таблицах... Если запросы отдельно, то можно выбирать только те поля, которые нужны, а не их объединение.
То что я описал выше - тривиальный случай. А могут понадобиться JOIN-ы с разными таблицами для генерации URL-ов. Или в одном случае понадобятся, а в другом - нет. Я не говорю, что генерация в таких случаях невозможна впринципе. Просто она будет сложнее, чем копипаст.
Т.е. решать тебе, все зависит от структуры сайта и того, чего нужно добиться.
И еще, всегда можно подсмотреть какое-то решение в другом месте, а лучше - не в одном.