2012-07-08 32 views
1

数据库加载当然。该GET项是自动完成的特林,它可以在组名的数据库中找到,但正如你看到的,如果它不匹配,我不想运行,如果,如果找到的第一部分,是的。问题是,如果我更换了get项一部分实际的字符串,它的工作原理,如果我添加一个字符串,它不存在于数据库中,它仍然有效般的魅力。但是当获得期限完成时,如果可以找到字符串,则无关紧要,无论如何,numrows将大于0。为什么? =和LIKE尝试以及OFC我错过了这个sql请求?

$query = "select * from `gamegroups` where `groupname` = '%{$_GET['term']}%'"; 

$resultset = mysql_query($query); 

if (mysql_num_rows($resultset) > 0){ 

$lolz = array(); 

while($row = mysql_fetch_assoc($resultset)) { 
    $lolz[] = $row['gameid']; 
} 
echo json_encode($lolz); 
      }else{print "no match debug";} 
?> 
+1

你错过的第一件事情是你净化你的输入步骤。这是对SQL注入的广泛开放。 – David 2012-07-08 13:28:17

+0

在运行时针对数据库执行的实际查询文本是什么? – David 2012-07-08 13:30:14

回答

0
$query = "select * from gamegroups where groupname LIKE '%" . mysql_real_escape_string($_GET['term']) . "%' LIMIT 1"; 

因为通配符,我假设你想要一个像结果呢?

你真正想要的是做一个相关性得分,并返回通过的相关性排序的结果,但它是此问题的范围之外。

+2

你的语句将返回一个错误,等号(=)是$查询变量和查询字符串之间失踪。 – 2012-07-08 13:34:38

+0

已修复。谢谢,没有明白。 – 2012-07-08 13:35:06

+0

数据是一个自动完成的字符串,非常简单,就像您的名字一样。如果我们看PHP在SQL数据库中找到匹配,它将运行如果,如果它不能被发现,那么结果numRows行应不大于0,这是我的问题。问题出现在获得期限阶段,无论数据库搜索是否成功,都会发现“某些事情”。如果我用实际的“名称来替代自动完成”而不是numrows工作好,即使它是匹配或不匹配。 – Flatline 2012-07-08 13:42:39

相关问题