2013-02-20 5 views
-2

Я пытаюсь создать каталог, в котором вы можете искать в соответствии с аргументами, которые вы даете. naam - это имя продукта, а woord - данные персонажи. позже в скрипте я приклеил эту часть запроса к первой части.Я не могу получить свой запрос на работу

Спасибо

if(strlen($whereQuery) > 0) 
    $whereQuery .= 'AND naam LIKE '%'.$woord.'%''; 
else 
    $whereQuery = 'WHERE naam LIKE '%'.$woord.'%''; 
+0

В чем проблема? Название не дает никакой информации и не отвечает на вопрос. – Woot4Moo

+0

Что вы подразумеваете под «не может работать»? Каков ожидаемый результат и что вы получаете? Вы получаете какие-либо ошибки? – rcdmk

ответ

1

Я предпочел бы использовать двойные кавычки, чтобы избежать путаницы,

if(strlen($whereQuery) > 0) 
    $whereQuery .= " AND naam LIKE '%" .$woord. "%' "; 
else 
    $whereQuery = " WHERE naam LIKE '%" .$woord. "%' "; 

или просто,

if(strlen($whereQuery) > 0) 
    $whereQuery .= " AND naam LIKE '%$woord%' "; 
else 
    $whereQuery = " WHERE naam LIKE '%$woord%' "; 

Как Замечание, запрос уязвим с помощью SQL Injection если значение (s) переменных произошло извне. Пожалуйста, ознакомьтесь с приведенной ниже статьей, чтобы узнать, как ее предотвратить. Используя PreparedStatements, вы можете избавиться от использования одинарных кавычек вокруг значений.

+1

или просто: '$ whereQuery =" WHERE naam LIKE '% $ woord%' ";' так как вы в двойных кавычках в любом случае ... – Neal

+0

@ Ничего хорошего. –

+0

это не сработает, так как у вас есть одинарные кавычки –

0

Вы должны избежать кавычки, которые являются частью запроса:

if(strlen($whereQuery) > 0) 
    $whereQuery .= 'AND naam LIKE \'%'.$woord.'%\''; 
else 
    $whereQuery = 'WHERE naam LIKE \'%'.$woord.'%\''; 

Или используйте сочетание одинарных и двойных кавычек.

1

Используйте двойные кавычки.

Или избежать одиночных кавычек.


Также, пожалуйста, не делайте то, что вы сейчас делаете.

Don't use mysql_* functions in new code. Они больше не поддерживаются and are officially deprecated. См. red box? Узнайте о prepared statements вместо этого, и используйте PDO или MySQLi - this article поможет вам решить, какой. Если вы выберете PDO, here is a good tutorial.

0

Любой редактор с цветовым кодированием сразу покажет вам проблему. Просто посмотрите на свой код в вопросе.

Попробуйте это:

$whereQuery = ($whereQuery ? $whereQuery." AND" : " WHERE")." naam LIKE '%".$woord."%'"; 

Это позволяет избежать повторения весь "как" часть в два раза;)

Кроме того, убедитесь, что вы правильно избежали $woord. mysql_real_escape_string В этом случае недостаточно. Вы также должны запустить его через preg_replace("/[%_]/","\\$1",$woord);, чтобы избежать специальных символов в предложении WHERE.

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