我有一个代码,可以使用ajax动态搜索数据库中的数据,但我一次只能搜索一个关键字。我想修改它,以便我可以搜索多个关键字。现在,如果我输入由空格分隔的2个关键字,并且在数据库中,数据没有用空格分隔,就没有结果。 如果在数据库中数据是:
'playstation3'或'play cool station3'
我搜索:
玩站
没有结果。我想知道是否可以修改我的代码,这样我就可以搜索2个或更多的关键字或用空格或其他单词或DOT或下划线或( - )或a(+)或a(%)分隔的单词或(其他任何大声笑)。
我知道我应该使用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>";
}
答案 0 :(得分:24)
要动态搜索所有关键字,您可以使用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
变量的长度并设置限制。否则,用户可以输入变大的字符串并使数据库崩溃。
答案 1 :(得分:2)
即使再进行测试,也不要使用mysql_*
功能。它们并不比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>";
}
?>
答案 2 :(得分:2)
这是@Hanky Panky的答案的 MySQL PDO 版本
$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
}
答案 3 :(得分:0)
只需添加一个OR子句。
E.g。
SELECT * FROM links WHERE name LIKE '%$keyword1%' OR name LIKE '%$keyword2%'
但我强烈建议您使用参数化查询或其他安全库来避免Sql Injection Attacks