2011-05-30 回答
SELECT info FROM list where uid=1 AND info=infox order by id desc limit 5
mysql没有x这样的通配符,改成:
SELECT info FROM list where uid=1 AND info LIKE 'info%' order by id desc limit 0,5
补充:
如果所有值都是 infox 这样的格式的,也可以通过正则来做
SELECT info FROM list where uid=1 AND info REGEXP '^info.$' order by id desc limit 0,5
追问:
我写的太特殊了。看看这个你就知道了。我写的是个ip统计系统,目的就是首先把访客的ip地址和数据表里的最近(也就是最后的5条记录里的ipaddress字段,我在图中用info字段代替了ipaddress)做对比。uid是为了区分同页面。这个你因该知道我的意思了吧,可是现在的这段代码实现不了,总是echo"不存在该字符";并且是循环的输出的3个相同的。
header("Content-type:text/html;charset=UTF-8");//设置页面编码
$uid=$_GET['uid'];
$getip=$_SERVER[REMOTE_ADDR];//获得客户端ip地址
$con=mysql_connect("123.23.22.35","user","ps12345");
mysql_select_db("logo",$con);
mysql_query("set character set 'utf8'");//读库
$panduan="SELECT ipaddress FROM ip where uid='$uid' order by id desc limit 5";
$q=mysql_query($panduan);
while($rows = mysql_fetch_row($q)){
if ($rows['ipaddress'] == '$getip'){
echo"存在";
break;
}
else{
echo "不存在该字符";
}
}
?>
追答:
$q=mysql_query($panduan);
改成
$q=mysql_query($panduan,$con);
指名使用哪个链接
追问:
链接标识符不是可以 省略吗,省略之后不是默认是最后一个查询语句吗,再说了就算是不存在该记录也不能让他循环输出啊。
追答:
$panduan="SELECT ipaddress FROM ip where uid='$uid' order by id desc limit 5";
你先将$panduan这个变量echo一下,吧输出的字符串拷贝到Mysql里面执行,看是否能查询到
追问:
有结果的。可以查询的。
追答:
刚看到了,你的 mysql_fetch_row 改成 mysql_fetch_array 就可以了
mysql_fetch_row 返回的数组是数值索引的,你要用字符索引用 mysql_fetch_array
补充:
为加快速度,你可以设置
mysql_fetch_array($q, MYSQL_ASSOC) 指明返回关联数组,省略第二个参数默认是 MYSQL_BOTH,返回关联数组和数字数组
追问:
我就这么给你说吧,我现在用的是uid=100 我现在的的ip地址是113.108.91.91(对应着id=3的那个记录),我怎么判断uid=100的最近5条记录里是否包含113.108.91.91 这个我说的应该够明白了吧。
追问:
这样还是实现不了啊,我感觉没有这么复杂啊
追答:
刚才的就可以实现了阿,其他不变,while循环改成
$ip_exists = false;
while($rows = mysql_fetch_array($q)) { if ($rows['ipaddress'] == '$getip') {
$ip_exists = true; break;
}}
if ($ip_exists == false) {
echo "不存在该字符";}
追问:
header("Content-type:text/html;charset=UTF-8");//设置页面编码
$uid=$_GET['uid'];
$getip=$_SERVER[REMOTE_ADDR];//获得客户端ip地址
$con=mysql_connect("123.23.22.35","user","ps12345");
mysql_select_db("logo",$con);
mysql_query("set character set 'utf8'");//读库
$panduan="SELECT ipaddress FROM ip where uid='$uid' order by id desc limit 3";
$q=mysql_query($panduan,$con);
$ip_exists = false;
while($rows = mysql_fetch_array($q,MYSQL_ASSOC)) {
if ($rows['ipaddress'] == '$getip') {
$ip_exists = true;
break;
}
}
if ($ip_exists == false) {
echo "不存在该字符";}
?>
我是这样做的,但是还是不行,这回输出的是 不存在该字符,但是明明uid=100的最后5条记录里包含我现在的ip啊
追答:
你在while里面if之前 添加 echo $rows['ipaddress']." / ".$getip."
";
看值是否正确
追问:
首先说明我在本地测试,所以我现在的ip地址是127.0.0.1我表里现在的最后一条记录就是uid=100的,且ip为127.0.0.1
刚才我有试了了还是这个结果。
127.0.0.1 / 127.0.0.1
127.0.0.1 / 127.0.0.1
不存在该字符
追问:
貌似左右的值不具可比性?数据表里的是字符串型的。vchar
追答:
if ($rows['ipaddress'] == '$getip') {
这行 '$getip' 去掉单引号
追问:
成功了,这次!
追答:
php操作mysql我不建议直接使用php的内置mysql函数,建议使用Adodb或者pdo,这2个都是高性能的抽象类库,他们都支持事务处理,支持事务处理,功能强大
追问:
恩,谢谢了,帮我解决了头疼的问题,我刚学的php,以后会多多了解的,谢谢