Деление на ноль, ошибка "Запрос был пуст" в 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 Подвиги Мамы

Другие вопросы по тегам