一尘不染

用php和mysql搜索多个关键字(其中X喜欢)

mysql

我有一个代码,可以使用ajax动态搜索数据库中的数据,但是一次只能搜索1个关键字。我想对其进行修改,以便可以搜索多个关键字。现在,如果在数据库中输入2个用空格分隔的关键字,则数据不会用空格分隔,将不会有结果。如果在数据库中,则数据为:

‘playstation3’或’play cool 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>";

    }

阅读 451

收藏
2020-05-17

共1个答案

一尘不染

要动态搜索所有关键字,可以使用explode函数将所有关键字分开;

$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作为替代方法

2018年更新-注意3: 不要忘记检查$queried变量的长度并设置限制。否则,用户可以输入不同的大字符串并使数据库崩溃。

2020-05-17