2012-06-16 3 views
1

Я сам учу себя делать MySQL и PHP. Это новый мир для меня, у меня есть несколько книг, и я много изучаю Google, прежде чем спрашивать здесь. Поэтому я застрял в следующей проблеме, и я не могу найти ответ, у меня есть база данных MySQL, в базе данных есть определенное поле, называемое URL.Запрос MySQL с PHP

Часть поля URL выглядит следующим образом:

&path=products&user=Mark24&id=2616 

В настоящее время у меня есть она настроена таким образом, люди могут осуществлять поиск в базе данных, и это работает. то, что я хочу добавить в функцию поиска, - это поиск по пользователю. как вы можете видеть, что пользователь находится в середине всего URL так что я это:

$query = "select Productid, Productname, url, from Products where Productid like '%$keyword%' or Productname like '%$keyword%' or url like '%$keyword%' "; 
    $result = mysqli_query($dbc,$query); 

Сейчас идет реальная проблема, ^^ это творит чудеса, люди могут на самом деле искать имя пользователя и он будет отображаться именно что я хочу. Однако, если люди ищут слово «продукты» или «путь», который также находится в URL-адресе, они получат более 2000 матчей, потому что каждый URL-адрес моей базы данных имеет слово «продукты и путь». Почему я хочу этого избежать? я не хочу, чтобы клиенты просматривали всю нашу базу данных, я также боюсь перегрузки сервера, потому что с каждым запросом клиент получает изображение продукта, а также имя продукта и ссылку на продукт. попытка загрузить более 2000 снимков также замедляет работу или сбой моего браузера, поэтому мне нужно как-то это исправить, но я не уверен, как ее решить.

Так есть способ сопоставить только ту часть, которая говорит user = "blah" для поля URL? я делаю это с PHP, preg-match возможно ???

Любая предоставленная информация высоко ценится! Благодарю.

+0

К не санировать это выглядит, вы можете быть vuln. –

ответ

1

Попробуйте вместо этого:

$query = "select Productid, Productname, url, from Products where Productid like '%$keyword%' or Productname like '%$keyword%' or url like '%user=$keyword%' "; 
+0

Это работает Спасибо, много, я не могу поверить, что ответ был таким простым! миллионы вариаций этого, но не этого! – user1294097

+0

приветствуется :) Это случается со всеми нами: p –

2

Почему бы не сделать еще две колонки? Один, содержащий имя пользователя и содержащий идентификатор? И затем, когда вы выполните поиск, найдите в них.

+0

, потому что мне нужно будет отредактировать таблицу с более чем 2000 полями? создайте новый столбец для каждой копии экземпляра и вставьте в новое имя пользователя столбца. Идентификация id в URL-адресе сильно отличается от идентификатора productId, который уже имеет свой собственный столбец. База данных постоянно растет ежедневно, поэтому не имеет смысла делать это для каждого URL-адреса на db. – user1294097

+0

@ user1294097 Вместо редактирования таблицы напишите скрипт ... –

1

просто искать

"%&path=products&user=%what you're searching for%" 

таким образом вы получите возвращенные только те строки, которые имеют «продукт», кроме вашего пути = параметра продукта. В качестве альтернативы, такие базы данных, как mysql, postgresql и другие, также позволяют использовать regular expressions, но это более дорогостоящее с точки зрения вычислительной мощности.

в форме регулярного выражения выглядел бы примерно так; с переменной PHP в середине:

"... WHERE url REGEXP '&path=products&user=" . $user . "&id=[0-9]+$'" 

, если вы используете что-то вроде этого, то вы должны защитить вашу введенную величину от SQL инъекции, убегая, хотя он. Вы должны начать смотреть на pdo для создания приложений с заправкой базы данных и использовать prepared statements с bound parameters, чтобы защитить себя. Вам просто нужно было бы просто создать ваше регулярное выражение и передать его в качестве параметра для привязки.

+0

'или url like '% & path = products & user =% $ keyword%'"; 'Не возвращает никаких результатов. – user1294097