0
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C ...

这是代码

function db_result_to_array($result) {

$res_array = array();

for ($count=0; $row = mysql_fetch_array($result); $count++) { 

    $res_array[$count] = $row;
}

return $res_array;

}

所以,错误就在这一行

    for ($count=0; $row = mysql_fetch_array($result); $count++)

我试过了

    mysql_fetch_object()
    mysql_fetch_assoc()
    mysql_fetch_row()

并没有工作

我试过了

    mysql_fetch_array($result, MYSQL_ASSOC)
    mysql_fetch_array($result, MYSQL_NUM)
    mysql_fetch_array($result, MYSQL_BOTH)

它没有用。你能帮我解决这个问题吗?

4

3 回答 3

2

您应该像这样运行代码:

$result = mysql_query(...) or die(mysql_error());
$data = array();
while($row = mysql_fetch_assoc($result)) {
    $data[] = $row;
}

几乎从不需要运行正常的 for() 循环来从结果集中获取行。到目前为止,使用 while 循环更可靠/更容易。当没有更多数据要提取时,它会自动终止,并且您不会遇到您的情况,您的循环在提取结束时运行。

于 2012-11-03T03:36:34.397 回答
1

$result应该是 sql 语句的结果,以及返回记录行的查询,例如SELECT * From someTable,查询必须语法正确才能获得有效结果

$sql = 'SELECT * FROM users'; //make sure no syntax error from generated query
$result = mysql_query($sql); //this should be a valid result [resouce id]

$recordsArray = db_result_to_array($result); //call your function with the valid result. boolean cannot be passed

也按照建议将您for的更改为。while

不鼓励使用 mysql_ 扩展

不鼓励使用此扩展程序。相反,应使用 MySQLi 或 PDO_MySQL 扩展...此功能的替代方案包括:

  • mysqli_query()

  • PDO::查询()

更新

来自上面发布的 MySQL 链接

对于 SELECT、SHOW、DESCRIBE、EXPLAIN 和其他返回结果集的语句,mysql_query() 成功时返回资源,错误时返回 FALSE。

对于其他类型的 SQL 语句,INSERT、UPDATE、DELETE、DROP 等,mysql_query() 在成功时返回 TRUE,在错误时返回 FALSE。

因此,如果成功执行,您将获得有效资源,否则将获得SELECT, SHOW, DESCRIBE, EXPLAIN布尔值 (FALSE)。

因为INSERT, UPDATE, DELETE, DROP你会得到 TRUE(成功)或 FALSE(错误)

于 2012-11-03T03:43:37.293 回答
-1

在调用函数之前,请查看如何分配 $result 变量。分配此 $result 时使用的查询是什么?

于 2012-11-03T03:38:59.063 回答