带有mysql_fetch_array函数的箭头for()

时间:2012-11-03 03:22:59

标签: php mysql for-loop syntax-error

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)

它不起作用。 你能帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:2)

你应该运行这样的代码:

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

几乎不需要运行普通的for()循环来从结果集中获取行。它使用while循环更可靠/更容易。当没有更多的数据需要获取时它会自动终止,并且你不会遇到你的情况,你的循环在fetch的末尾运行。

答案 1 :(得分: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

  

Use of mysql_ extension is discouraged

     

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

     
      
  • mysqli_query()

  •   
  • PDO ::查询()

  •   

更新

  

从上面发布的MySQL链接

     

对于SELECT,SHOW,DESCRIBE,EXPLAIN和其他语句返回   resultset,mysql_query()在成功时返回资源,或者返回FALSE   错误。

     

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

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

对于INSERT, UPDATE, DELETE, DROP,您将获得TRUE(成功)或FALSE(错误)

答案 2 :(得分:-1)

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