首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用php和mysql搜索多个关键字(其中X类似)

问使用php和mysql搜索多个关键字(其中X类似)
EN

Stack Overflow用户
提问于 2013-03-21 02:37:19
回答 4查看 29.7K关注 0票数 8

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

“playstation3”或“play酷station3”

我寻找的是:

播放台

不会有结果的。我想知道是否有可能修改我的代码,这样我就可以搜索2个或更多的关键字或单词,用空格或另一个单词或DOT或下划线或a (-)或a (+)或a (%)或(任何其他lol)分隔。

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

代码语言:javascript
复制
$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>";

    }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-21 02:55:05

要动态搜索所有关键字,可以使用search函数来分离所有关键字;

代码语言:javascript
复制
$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变量的长度并设置限制。否则,用户可以输入不同的大字符串并使数据库崩溃。

票数 23
EN

Stack Overflow用户

发布于 2013-03-21 02:53:53

即使在测试时也不要使用mysql_*函数。它们并不比mysqli容易,只是为了防止您认为在这里测试容易,然后移动。

但是,您可以将输入拆分到,上,并尝试如下

代码语言:javascript
复制
<?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>";

}    
?>
票数 2
EN

Stack Overflow用户

发布于 2018-10-30 19:16:11

这是@Hanky Panky的答案的MySQL PDO版本

代码语言:javascript
复制
 $queried="abc,test, testing";
 $values=explode(',',$queried);
 $sql="SELECT * FROM citations_new WHERE";
 $i=0;
        foreach($values as $v){
            $v=trim($v);
            if($i==0) {
                $sql.=" name LIKE '%$v%'";
            }
           else {
               $sql.=" OR name LIKE '%$v%'";
           }
           $i++;
         }

$sth = $this->db->prepare($sql);
$sth->execute();
$rows = $sth->setFetchMode(PDO::FETCH_ASSOC);

while($row = $sth->fetch()){
    //enter code here   
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15538479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档