2011-05-23 98 views
1

可能重复:
mysql_fetch_array() expects parameter 1 to be resource, boolean given in selectPHP打印MySQL数据)

我拖的MySQL数据库。第一个数据库的位置是latin1_swedish_ci,第二个数据库的位置是utf_unicode_ci.I我试图用下面的php代码读取数据库。

<?php 
mysql_connect("localhost","admin","***"); 
mysql_select_db("MyDB"); 
$sql=mysql_query("select * from menu where avail=1"); 
while($row=mysql_fetch_assoc($sql)) 
$output[]=$row; 
print(json_encode($output)); 
mysql_close(); 
?> 

当我通过我的PHP服务器乳宁这个代码的第一个数据库中的一个与latin1_swedish_ci是readed但是当我想读它会显示以下信息,第二个:

"Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in...." 
"Notice: Undefined variable: output in...." 

我试图给予 mysql_query(“SET NAMES utf8;”); 在我的代码,但它没有工作 任何人都可以告诉我这里怎么了?

+1

*注意:未定义的变量:输出在.... * ...为什么你检查错误信息? – 2011-05-23 17:22:04

+3

在这种情况下无关紧要;这很明显,为什么这个通知被抛出。 – ThiefMaster 2011-05-23 17:23:55

+0

如果$ sql是一个布尔值(假),那意味着有一个SQL错误。在执行查询后添加'echo mysql_error()'以查看出了什么问题。 – 2011-05-23 17:24:08

回答

-1

尝试的mysql_fetch_array代替mysql_fetch_assoc

还要定义$output使用前:

所有的
$output = array(); 
while($row=mysql_fetch_array($sql)) 
    $output[]=$row; 
+0

@downvoter,谨慎解释? – Neal 2011-05-23 17:21:40

+0

是:'mysql_fetch_assoc()'返回一个关联数组,而'mysql_fetch_array()'返回一个包含关联索引和数字索引的数组。所以它不仅扩张了他的json,而且增加了他可能不需要的数据。 – ThiefMaster 2011-05-23 17:23:32

+0

它是一样的东西 – George32x 2011-05-23 17:26:41

1

首先,你应该在循环之前添加$output = array();

然后,修复您的查询,使其不会失败。如果mysql_query()返回布尔值(false),则表示查询失败。

您可以添加一个丑陋的结构,看看它为什么失败:

$sql=mysql_query("select * from menu where avail=1") or die(mysql_error()); 
1

你必须在你的查询时出现错误。导致此行的错误:

$sql=mysql_query("select * from menu where avail=1"); 

返回false。此错误时,馈送到下一行:

while($row=mysql_fetch_assoc($sql)) 

引发第一个错误。这段时间被跳过,因此这条线从未被执行:

$output[]=$row; 

因此第二个警告。

添加mysql_error()您mysql_ *后声明这样 ,使这个习惯

mysql_connect("localhost","admin","***") or die(mysql_error()); 
. 
. 
. 
mysql_select_db("MyDB") or die(mysql_error()); 
. 
. 
. 
$sql=mysql_query("select * from menu where avail=1") or die(mysql_error()); 

这些的die(mysql_error())声明显示错误消息后终止脚本。尽管可能会也可能不需要在mysql错误上使脚本死亡,但大多数人仍然这样。而不是使用die语句,您可以检查返回值,并在必要时终止脚本。

您的案例中的错误似乎是在数据库选择线。可能是您在mysql_select_db中指定的数据库名称不正确,或者您可能没有权限读取该数据库(与给定用户名/密码建立连接并不意味着该用户可以读取所有数据库)。发布错误消息(再次)。

+0

它prinds“没有选择数据库” – George32x 2011-05-23 17:36:02

+0

我编辑了我的答案。您可能在'mysql_select_db()'语句中输入了错字,或者您没有权限读取数据库。可能还有其他不寻常的原因。 – 2011-05-24 04:20:28