我尝试为个人资料制作一个搜索引擎,但我发现了一个错误,即"除以零"在我使用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
的情况下进行简单查询时,它会返回结果。
答案 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