除以零,"查询为空" MySQL中的错误

时间:2014-06-11 23:23:58

标签: php mysql sql search-engine

我尝试为个人资料制作一个搜索引擎,但我发现了一个错误,即"除以零"在我使用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 个答案:

答案 0 :(得分: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偏移量以最符合您的需求。

答案 1 :(得分:0)

MySQL错误是由格式错误的SQL文本引起的。由于用于解释/连接字符串的PHP语法,代码中的问题是没有生成所需的SQL文本。

我建议您在字符串的文字部分周围使用双引号,并使用点运算符表示连接。

我还建议您将字符串操作作为单独的步骤,以便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);

Little Bobby Tables XKCD Exploits of a Mom