【进来请严肃】从mysql取数据时提示Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result

ckvip 2008-11-14 09:23:08
如题,这个问题我上百度,google查询了无数,多少是因为sql查询语句错误,查不到数据导致。其中有个人,怎么说呢,感觉这人在故意误导别人,到处告诉别人在mysql_fetch_array加个@来屏蔽错误信息,其实问题根本没解决,仅仅是不提示错误而已。下面是代码

$conn=mysql_connect("localhost","test","test");
echo $conn."<br>";//此处打印结果为:Resource id #1
mysql_select_db("test")
$r=mysql_query("select * from table1 where id > 0",$conn);
if($r==false) echo "query error";//此处打印结果为:query error
else
{
while ($row=mysql_fetch_array($r,MYSQL_ASSOC))
{
$rows[]=$row;
}
}
其实,这个程序,我在本地是可以运行的,可传到houstmonster虚拟机上就不行了,为调试,我把程序简化成上面的样子,可还是不行,执行query查询后,一直返回false,取数据时就报错,Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result

我用phpMyadmin连上服务器,执行select * from table1 where id > 0是没有问题的。
请高手指点,我是初学php,从c#转过来的。
...全文
2714 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
dianhuoyizu 2012-08-08
  • 打赏
  • 举报
回复
我的问题不同,因为我明知道我查的结果有的有,有的没得的,所以我只需要屏蔽掉错误的提示信息就行,正确的结果还是显示的。因为我是两组数据做匹配的,所以就造成有的数据在数据库里有,有些没得。
战斗生活 2009-10-09
  • 打赏
  • 举报
回复
楼主说得很清楚啊
太对了
谢谢
tianyilegend 2009-09-26
  • 打赏
  • 举报
回复
是啊,楼主提出的问题很好啊,我也出现了这样的问题,后来按楼主说的办,虽然我不是犯的那种错误,但是也要好好感谢楼主哦。对了,如果还有其他人遇到这样的问题,就请好好注意一下,是否连接数据库成功,是否选择了正确的数据库。
Zijian_Zhang 2008-11-15
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 jakey9826 的回复:]
呵呵,没遇到问题的时候你可能永远不会相信,调试一下就知道为什么了!
[/Quote]
那有一个解决办法,让楼主把“while($row=mysql_fetch_array($r,MYSQL_ASSOC)) ”这句话改成“while($row=mysql_fetch_array($r)) ”,看看能不能???

LZ:楼主把“while($row=mysql_fetch_array($r,MYSQL_ASSOC)) ”这句话改成“while($row=mysql_fetch_array($r)) ”试一下行不行??
Zijian_Zhang 2008-11-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fxs_2008 的回复:]
上传到服务器要改用户名和密码


PHP code$conn=mysql_connect("localhost","test","test") ordie('联接不成功');mysql_select_db("test");//注意分号$r=mysql_query("select * from table1 where id > 0",$conn) ordie("查询不成功");if(mysql_num_rows($r)>0){//如果有记录则执行while($row=mysql_fetch_array($r))
{$rows[]=$row['字段'];
}
}
[/Quote]没有错的,楼主的$conn,显示了资源变量啊!“echo $conn." <br>";//此处打印结果为:Resource id #1 ”这里讲明了连接正常啊
程序猿之殇 2008-11-15
  • 打赏
  • 举报
回复
呵呵,没遇到问题的时候你可能永远不会相信,调试一下就知道为什么了!
Zijian_Zhang 2008-11-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jakey9826 的回复:]
返回数组为false
这种情况我遇到过一回,不过是别人说access的.
建议查看服务器和本地的mysql版本,以及建库语句是否一致.
while ($row=mysql_fetch_array($r,MYSQL_ASSOC))
问题可能就出在你加的哪个参数MYSQL_ASSOC,其实你直接$row=mysql_fetch_array($r),默认是两种数字索引和字段索引都存在,然后print_r($row)查看服务器是否支持字段名索引.

[/Quote]
应该没有问题的,MySQL是支持字段索引的,被上传服务器的MySQL没可能那么落后的,MYSQL_ASSOC应该是支持的
ckvip 2008-11-15
  • 打赏
  • 举报
回复
谢谢各位热心的朋友,问题找到了,是我的用户对该数据库没有查询权限,更改权限后解决问题

前面有个朋友提醒我查看数据库配置,我以为是指mysql的系统设置,搞了好久没有结果

最后证明,出现这样的错误,一般是查询不到结果,不是sql语句错误,就是连接错误,或者权限问题。

再次感谢,立刻结贴,人人都有分
程序猿之殇 2008-11-15
  • 打赏
  • 举报
回复
返回数组为false
这种情况我遇到过一回,不过是别人说access的.
建议查看服务器和本地的mysql版本,以及建库语句是否一致.
while ($row=mysql_fetch_array($r,MYSQL_ASSOC))
问题可能就出在你加的哪个参数MYSQL_ASSOC,其实你直接$row=mysql_fetch_array($r),默认是两种数字索引和字段索引都存在,然后print_r($row)查看服务器是否支持字段名索引.
xiayong404 2008-11-15
  • 打赏
  • 举报
回复
我以前也遇到加@ 出错,但是我后来发现。如果要加就要全部加,要么全部不加。加个别两个就会报错。
5楼的代码已经写的很清楚了。lz再多看看手册吧
Zijian_Zhang 2008-11-15
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 iasky 的回复:]
你的MySQL连接没有成功!
[/Quote]楼主说已经返回了资源变量了啊,echo $conn." <br>";//此处打印结果为:Resource id #1 这里表明了
iasky 2008-11-15
  • 打赏
  • 举报
回复
你的MySQL连接没有成功!
Zijian_Zhang 2008-11-15
  • 打赏
  • 举报
回复
mysql_num_rows($r)这个没有提示错误吗?这个没有错误证明$r是有资源的,即是mysql_query是正常的,那你去掉$conn那些数据库资源变量,试一下行吗?(按道理应该加上也没有问题,楼主试一下吧)
程序猿之殇 2008-11-15
  • 打赏
  • 举报
回复
$r=mysql_query("select * from table1 where id > 0",$conn);
后加上
echo mysql_error();
首先要证明你的查询是否成功.
然后再决定用mysql_fetch_array来取.
如果查询已经成功了,换mysql_fetch_row试下,看是什么结果.
多调试吧.
session1983 2008-11-15
  • 打赏
  • 举报
回复
MYSQL_ASSOC,应该是将行返回为管理数组,字段名表示键,而字段内容表示值。楼主说,你是在空间上执行错误,你确定你在数据库的配置上没有问题吗?
另外我通常是使用mysqli扩展来操作的。mysql_fetch_array是不是php4的写法啊?mysql_fetch_array($query);
dzxccsu 2008-11-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mlsml 的回复:]
$r=mysql_query("select * from table1 where id > 0",$conn);
你是不是写反了:$r=mysql_query($conn,"select * from table1 where id > 0");

while ($row=mysql_fetch_array($r,MYSQL_ASSOC))
MYSQL_ASSOC?需要这个么?直接while ($row=mysql_fetch_array($r))不可以么?为什么你的写法和我的不一样了~~~~
[/Quote]3楼,别误倒别人,上面的写法是没有错误的!
fxs_2008 2008-11-15
  • 打赏
  • 举报
回复
上传到服务器要改用户名和密码




$conn=mysql_connect("localhost","test","test") or die('联接不成功');
mysql_select_db("test"); //注意分号
$r=mysql_query("select * from table1 where id > 0",$conn) or die("查询不成功");
if(mysql_num_rows($r)>0){ //如果有记录则执行

while ($row=mysql_fetch_array($r))
{
$rows[]=$row['字段'];
}
}



ckvip 2008-11-15
  • 打赏
  • 举报
回复
我认为,关键还是查询,为什么返回false
查询语句简单得不能再简单了,而且通过服务器上的phpmyAdmin执行过查询,没有问题
难道是select db的问题,可我用mysql_select_db("test",$conn)也试过,结果还是一样

或许是php的配置问题,有没有人知道hostmonster的php怎么设置呢

我快抓狂了
ckvip 2008-11-15
  • 打赏
  • 举报
回复
mysql 版本是5.0.45
服务器是Localhost via UNIX socket
php版本是php 5

去掉fetch的MYSQL_ASSOC的参数后,执行结果是一样的
依然提示Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result
查询结果$r依然是false
ckvip 2008-11-15
  • 打赏
  • 举报
回复
既然前面查询的时候,返回false 那么即使去掉fetch的MYSQL_ASSOC参数,也是没用的
但我还是试一下,有时候,程序是说不明白的,特别是微软的那套。

服务器是php5 + mysql 5,具体的版本不记得了,等下去看看
加载更多回复(4)

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧