PHP通过json_encode()打印mysql数据

时间:2011-05-23 17:19:50

标签: php mysql ajax

  

可能重复:
  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;”); 在我的代码中但它没有用 谁能告诉我这里出了什么问题?

3 个答案:

答案 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;