php mysql 模糊查询

如题,我想用php实现模糊查询数据库里面的数据,如:输入关键字“我爱你”(假设是“我爱你”,其实它是一个变量)后进行搜索,只要内容中有“我”、“爱”、“你”、“我爱”、“... 如题,我想用php实现模糊查询数据库里面的数据,如:输入关键字 “ 我爱你”(假设是“我爱你”,其实它是一个变量) 后进行搜索,只要内容中有“我”、“爱”、“你”、“我爱”、“爱你”、“我你”、“我爱你”等组合的都显示出来,我们知道用SELECT * FROM "msg" WHERE con LIKE "%我爱你%"语句 并不能实现,只能找出内容中包含“我爱你”的,那应该怎样实现我所说的这种模糊查询呢?
注:要查询的关键词并不是一个常,是一个变量$keyword
展开
 我来答
陈暴龍
2011-04-28 · TA获得超过406个赞
知道小有建树答主
回答量:175
采纳率:0%
帮助的人:169万
展开全部
原谅我的看错.楼上的朋友.
不过就算你在头文件设了utf-8.就能保证数据库服务器->服务器->客户端都不乱码吗?Mysql我就不清楚了. mssql 就不一定啦. 如果是mssql我建议必须用函数编码.
另我感到怀疑的是楼上的同学 居 然 用 str_split() 函 数 去 拆 分 中 文 字 符 ....我没试过结果.如果结果可行.那使用楼上的同学的吧.毕竟比较简单.我这种比较保险.

瞧俺老孙的法宝.........BINGO 开始

html 页面
<input type=“text”>
<script>var url = "fuck.php?fuck=" + escape(document.getElementsByTagName("input")[0].value);
//传递和跳转的window函数我就不写了喔
</script>

php 页面
// php 解码函数
function unescape($str) {
$str = rawurldecode($str);
preg_match_all("/%u.{4}|&#x.{4};|&#d+;|.+/U",$str,$r);
$ar = $r[0];
foreach($ar as $k=>$v) {
if(substr($v,0,2) == "%u")
$ar[$k] = mb_convert_encoding(pack("H4",substr($v,-4)),"gb2312","UCS-2");
elseif(substr($v,0,3) == "&#x")
$ar[$k] = mb_convert_encoding(pack("H4",substr($v,3,-1)),"gb2312","UCS-2");
elseif(substr($v,0,2) == "&#") {
$ar[$k] = mb_convert_encoding(pack("H4",substr($v,2,-1)),"gb2312","UCS-2");
}
}
return join("",$ar);
}

// 这里法宝开始 完美解决每个汉字拆分出来

$arr = explode("u",$_GET["fuck"]); //是因为escape编码后每个汉字的开头都是u
$shit = "";
foreach($arr as $value)
{
$value = unescape($value);// 网上找到的php 解码函数
$shit .= "%".$value."%"; //字符串拼接好了可供查询了呵呵
}
$sql = "select * from table where con like ‘$shit’";
//或者 $shit = "'".$shit."'"; 然后$sql = "select * from table where con like“.$shit.;

xxsql_query($sql); // 大功告成! 后面的echo 自己喜欢怎样格式输出就输出呗.
foxaobe
2011-04-27 · TA获得超过331个赞
知道小有建树答主
回答量:897
采纳率:0%
帮助的人:621万
展开全部
我也想得到这样的效果,想好很长时间,只有用标签的方式。就是一篇文章标题,对应设置标签。像“我爱你”,对应的标签可以设置为“我爱,爱你”这两个,单独建一张标签表。这篇文章对应两条标签搜索。表结构为id,文章ID,标签名、。搜索时到标签表中搜索标签名,找到对应的文章ID就出来结果了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
逐风者雷霆之惹
推荐于2016-04-11 · TA获得超过976个赞
知道小有建树答主
回答量:523
采纳率:0%
帮助的人:732万
展开全部
这个问题比较麻烦
不过如果是每个字都分的话就没那么麻烦了
可以这样

下面是我刚写的,
你可以把变量$st 加到你的sql语句的最后面
拿下面的例子来说 最后$st的值是 '%你%' or '%是%' or '%谁%' or '%呀%'

我用的是UTF8编码,中文的字符是占三个B
如果你用别的编码的话可以把 第五行的方法里面的第二个参数改成2
<?php
header('Content-type:text/html;Charset=utf-8');
$keyword = '你是谁呀';

$re = str_split($keyword,3);
echo '<pre>';
var_dump($re);

$st;
$index=0;
$max = count($re);
foreach($re as $value){
$index++;
if($index == $max) {
$st.='\'%'.$value.'%\'';
}else{
$st.='\'%'.$value.'%\' or ';
}
}

echo $st;

(这个暂时只能解决中文的)
给分

楼下的~~~。。。
我的$keyword也是变量好不好。。。
传过来什么就是什么的
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
刺客李贰叁

2011-04-27 · 小小PHP程序猿一枚!
刺客李贰叁
采纳数:312 获赞数:1005

向TA提问 私信TA
展开全部
like '%我%' or like '%爱%' or like '%你%'

试试这样行不行。
追问
你这样写出来的是可以的,但是我只是举个例子,要搜索的关键字是个变量,假如是“我爱中国”,那我又得改代码了……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
晨溪班长
2011-05-02
知道答主
回答量:58
采纳率:0%
帮助的人:22.1万
展开全部
试试字符串截取把
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式