Php 被零除后,MySQL中出现“查询为空”错误

Php 被零除后,MySQL中出现“查询为空”错误,php,mysql,sql,search-engine,Php,Mysql,Sql,Search Engine,我试图为配置文件创建一个搜索引擎,但我存储了一个被零除的错误,在我使用var_dumpmysql_错误后,它显示我的查询是空的 以下是我的查询和php代码: $search_rs = dbq('SELECT * FROM users WHERE fname LIKE '%$_GET[query]%' LIMIT 0, OR fname LIKE '%$_GET[query]%''); if($search_rs == false) {

我试图为配置文件创建一个搜索引擎,但我存储了一个被零除的错误,在我使用var_dumpmysql_错误后,它显示我的查询是空的

以下是我的查询和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“%$\u GET[query]”并在没有LIKE的情况下进行简单查询时,它会返回结果。

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

我建议在字符串的文字部分使用双引号,并使用点运算符表示串联

我还建议您将字符串操作作为一个单独的步骤进行,以便SQL文本可用于检查/调试

我还强烈建议您在SQL文本中包含用户提供的数据时,使用mysql_real_escape_string函数来减少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);

小Bobby表XKCD更改您的查询:

'SELECT * FROM users WHERE fname LIKE '%$_GET[query]%' LIMIT 0, OR fname LIKE '%$_GET[query]%''
为此:

"SELECT * FROM users WHERE fname LIKE '%" . $_GET['query'] . "%'"
你遇到的问题是:

对整个查询字符串以及其中类似的“…%”值使用单引号。现在使用双引号,将值连接起来。 您的$\u-GET[query]也缺少单引号,因此这些引号被更改为$\u-GET['query']。 限制0的位置没有任何意义,因此它已消失。 也不确定为什么有两个fname,如“%”$_获取['query'].%在那里。删除了第二个。 如果您不知何故需要限制,那么此查询应该可以工作:

"SELECT * FROM users WHERE fname LIKE '%" . $_GET['query'] . "%' LIMIT 0,100"

但我只是假设您需要100个项目,所以请更改该100以及0偏移量以最佳匹配您的需要。

一旦您为查询正确地引用/连接字符串,这将起作用,您还将存在一个巨大的SQL注入漏洞。您不应仅转储代码,而应删除不必要的代码。