2013-03-21 44 views
5

我有一个代码可以使用ajax动态搜索数据库中的数据,但我一次只能搜索1个关键字。我想修改它,以便我可以搜索多个关键字。现在,如果我键入由空格和数据库分隔的2个关键字,则数据不会被空格分隔,将不会有结果。 如果在数据库中的数据是:用php和mysql搜索多个关键字(其中X就像)

'PLAYSTATION3' 或 '玩酷STATION3'

,我搜索:

游戏站

有将是没有结果。我想知道是否可以修改我的代码,以便搜索2个或更多由空格或其他单词或DOT或下划线或( - )或(+)或(%)字符分隔的关键字或单词。或者(别的什么大声笑)。

我知道我应该使用pdo或mysqli,但我只用于测试!

$queried = $_POST['query']; 



$search = mysql_query("SELECT * FROM links WHERE name LIKE '%$queried%'"); 
while($searche = mysql_fetch_array($search)){ 
    echo "".$searche['link']."</br>".$searche['name']."</br>".$searche['size']."</br>".$searche['category']."<hr></br></br>"; 

    } 

回答

17

要动态搜索所有的关键词,你可以使用爆炸功能单独所有关键字;

$queried = mysql_real_escape_string($_POST['query']); // always escape 

$keys = explode(" ",$queried); 

$sql = "SELECT * FROM links WHERE name LIKE '%$queried%' "; 

foreach($keys as $k){ 
    $sql .= " OR name LIKE '%$k%' "; 
} 

$result = mysql_query($sql); 

注1:在查询中使用之前请务必逃跑用户输入。

注2: mysql_ *功能已被弃用,使用的mysqli或PDO作为替代

+1

非常感谢!有用! – user1932820 2013-03-21 03:04:46

+0

谢谢你,这是非常有帮助的全... – 2016-03-02 06:21:57

+0

@SandunHarshana你很受欢迎 – Ibu 2016-03-02 06:43:51

0

只需添加一个OR子句。

E.g.

SELECT * FROM links WHERE name LIKE '%$keyword1%' OR name LIKE '%$keyword2%' 

但我强烈建议您使用参数化查询或其他安全的库,以避免Sql Injection Attacks

+0

你是对的,谢谢!但我没有2种形式,我有1种形式,当我搜索时,它不准确。这里是我正在寻找的一个例子---> http://mega-search.me/当你输入时,你可以把一个以上的关键字用一个空格分开,并且查询会找到一个结果。 – user1932820 2013-03-21 02:57:46

1

不要使用mysql_*功能甚至testing了。它们不会比mysqli更容易,以防万一您认为在此测试容易,然后移动。

但是你可以在,拆分输入,并尝试这个

<?php 

$queried="abc,test, testing"; 
$values=explode(',',$queried); 


$sql="SELECT * FROM links WHERE"; 
$i=0; 
foreach($values as $v) 
{ 
$v=trim($v); 
if($i==0) 
{ 
$sql.=" name LIKE '%$v%'"; 
} 
else 
{ 
$sql.=" OR name LIKE '%$v%'"; 
} 

$i++; 
} 

$search = mysql_query($sql); 
while($searche = mysql_fetch_array($search)){ 
    echo "".$searche['link']."</br>".$searche['name']."</br>".$searche['size']."</br>".$searche['category']."<hr></br></br>"; 

    }  
?> 
+0

非常感谢!有用。我认为我可以自动替换%20的空格,然后自动获取不同的单词。谢谢!它真的有帮助 – user1932820 2013-03-21 03:06:23

+0

很高兴它有帮助。这里的“trim”功能会自动从关键字的开头或结尾删除多余的空格,因此您不必手动替换空格 – 2013-03-21 03:08:44