可能重复:
mysql_fetch_array() expects parameter 1 to be resource, boolean given in select
我有两个mysql数据库。第一个数据库位置是latin1_swedish_ci,第二个数据库是utf_unicode_ci。我正在尝试使用下面的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的数据库,但是当我尝试读取第二个数据库时,它会显示以下消息:
"Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in...."
"Notice: Undefined variable: output in...."
我试着给 mysql_query(“SET NAMES utf8;”); 在我的代码中但它没有用 谁能告诉我这里出了什么问题?
答案 0 :(得分:1)
首先,您应该在循环之前添加$output = array();
。
然后,修复您的查询,使其不会失败。如果mysql_query()
返回布尔值(false
),则表示查询失败。
你可以添加一个丑陋的构造来查看它失败的原因:
$sql=mysql_query("select * from menu where avail=1") or die(mysql_error());
答案 1 :(得分:1)
您的查询中有错误。错误导致了这一行:
$sql=mysql_query("select * from menu where avail=1");
返回false
。当送到下一行时这是错误的:
while($row=mysql_fetch_assoc($sql))
提出了第一个错误。跳过了while,因此这行从未执行过:
$output[]=$row;
因此第二次警告。
在你的mysql_ *语句之后添加一个mysql_error()
,如 并使这成为习惯 :
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中指定的数据库名称不正确,或者您可能没有读取该数据库的权限(与给定用户名/密码建立连接并不意味着该用户可以读取所有数据库)。发布错误消息(再次)。
答案 2 :(得分:-1)
尝试使用mysql_fetch_array
代替mysql_fetch_assoc
在使用之前定义$output
:
$output = array();
while($row=mysql_fetch_array($sql))
$output[]=$row;