Деление на ноль, ошибка "Запрос был пуст" в MySQL
Я пытаюсь создать поисковую систему для профилей, но у меня появляется ошибка "Деление на ноль", и после того, как я использовал var_dump(mysql_error()), он показывает мне "Запрос был пуст".
вот мой запрос и код php:
$search_rs = dbq('SELECT * FROM users WHERE fname LIKE '%$_GET[query]%' LIMIT 0, OR fname LIKE '%$_GET[query]%'');
if($search_rs == false) {
var_dump(mysql_error());
}
elseif (db_num($search_rs) > 0) {
while ($results = db_next($search_rs)) {
echo('<li>
<a class="avatar" href="http://mysite/'.$results['pagekey'].'" target="_blank">
<img src="'.thumbnail($results['avatar'], 64, 64).'" />
</a>
<div class="info">
<a href="http://profiler.ir/'.$results['pagekey'].'" target="_blank">
<span class="fullname">'.$results['pre_name'].' '.$results['fname'].' '.$results['lname'].'</span>
</a>
</div>
</li> ');
}
}
else echo "not found !!!";
НО когда убираю LIKE '%$_GET[query]%'
и сделать простой запрос без LIKE
Вернем результаты.
2 ответа
Измените свой запрос с этого:
'SELECT * FROM users WHERE fname LIKE '%$_GET[query]%' LIMIT 0, OR fname LIKE '%$_GET[query]%''
К этому:
"SELECT * FROM users WHERE fname LIKE '%" . $_GET['query'] . "%'"
Проблемы у вас были:
- Использование одинарных кавычек для всей строки запроса, а также
LIKE '%…%'
ценности внутри них. Так что теперь используйте двойные кавычки, объединяя значения. - Вы также пропустили одинарные кавычки для вашего
$_GET[query]
так что они изменены на$_GET['query']
, - Размещение
LIMIT 0,
не имеет смысла, так что ушел. - Также не уверен, почему у вас было два
fname LIKE '%" . $_GET['query'] . "%'
там. Убрал второй.
Если вам как-то нужно LIMIT
тогда этот запрос должен работать:
"SELECT * FROM users WHERE fname LIKE '%" . $_GET['query'] . "%' LIMIT 0,100"
Но я просто предполагаю, что вам нужно 100 предметов, так что измените это 100
так же хорошо как 0
смещение, чтобы наилучшим образом соответствовать вашим потребностям.
Ошибка MySQL вызвана искаженным текстом SQL. Проблема в коде заключается в том, что нужный текст SQL не создается из-за синтаксиса PHP для интерпретации / объединения строк.
Я рекомендую вам использовать двойные кавычки вокруг буквенных частей строки и использовать оператор точки для обозначения конкатенации.
Я также рекомендую вам выполнять операции со строками как отдельный шаг, чтобы текст SQL был доступен для проверки / отладки.
Я также настоятельно рекомендую вам использовать mysql_real_escape_string
функция для уменьшения уязвимостей внедрения SQL (при включении пользовательских данных в текст SQL).
В качестве примера:
$sql = "SELECT * FROM users WHERE fname LIKE '%" . mysql_real_escape_string($_GET[query]) . "%'";
#vardump($sql); # for inspecting/debugging issues with generating SQL text
$search_rs = dbq($sql);
Маленькие Бобби Столы XKCD Подвиги Мамы