2017-06-02 89 views
0

我遇到问题。我需要使用Like关键字从表格中搜索价值,同时我将文本中的特殊字符显示为不显示任何结果。我在下面解释我的查询。使用PHP和Mysql时,无法搜索字符串中的特殊字符

$name="Henna*/" 
$sname='%'.$name.'%'; 
$sql="select * from cn_user_login name like '".$sname."' order by login_id desc"; 

我正在解释下面的表格。

cn_user_login:

login_id  name     status 

1    Heena Mohanty   1 

2   Heena raj    1 

3   [email protected]     1 

4   Heena*     1 

这里没有搜索结果即将到来。在这里我不需要任何特殊字符,如果它匹配一些/所有字母的结果应该来。请帮帮我。

+0

能否请您确认,如果您正在寻找单词“指甲花”或“海娜*” – maSTAShuFu

回答

0

你可以试试这个..删除特殊字符

$name="Henna*/"; 
$sname = preg_replace('/[^A-Za-z0-9\-]/', '', $name); 

$sql="select * from cn_user_login where name like '%".$sname."%' order by login_id desc"; 
+0

相同的字符串可以具有不同的特殊字符。如何获取适当的结果? – lalithkumar

+0

$ sname将返回为Henna ...因此像%Henna%'...如果您认为有更多的特殊字符,然后扩大正则表达式的覆盖范围 – maSTAShuFu

+0

那么这将返回Heena @,Heena *。他只需要抓取Heena *。 – lalithkumar

0

尝试使用常规的期望

$name = preg_replace('/[^A-Za-z0-9\-]/', '', $name); 

$name = preg_replace('/[^A-Za-z0-9\-\']/', '', $name); 
如果 你知道字符

然后用其替换str_replace()函数

$name = str_replace("your character", '', $name); 
+0

谢谢你复制我的答案 – maSTAShuFu

+0

当我写我的答案时,你的答案是“addslashes()”函数,你在编写我的答案时编辑你的答案 –

+0

不是我的...是从拉利思 – maSTAShuFu

0

更好的解决方案是使用准备语句PDO

你可以这样写:

$sql = 'select * from cn_user_login name like :param_name order by login_id desc'; 
$paramName = '%'.$name.'%'; 

$db = new PDO('dsn_string', 'user', 'password'); 
$stm = $db->prepare($sql); 
$stm->execute([':param_name' => $paramName]); 
$result = $stm->fetchAll(); 
相关问题