【问题标题】:Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource [duplicate]警告:mysql_fetch_array():提供的参数不是有效的 MySQL 结果资源 [重复]
【发布时间】:2011-09-19 09:06:18
【问题描述】:

当我运行以下 php 代码时,即使在 practice_calendar_times 中有不止一行,while 循环也只会运行一次。

$sql = "
    SELECT * FROM practice_calendar_times;
    ";
$result = mysql_query($sql, $con);
if($result){
    while($practice = mysql_fetch_array($result)){
        //... Prints data from the row + more ...
    }
}

在网页上,我收到一条打印的警告消息:“警告:mysql_fetch_array():提供的参数不是 /rmounts/vol0-nas/yorkweb/webs/fencing/MyWebSite/homecontent.php 中的有效 MySQL 结果资源第 113 行"。

第 113 行是 while 循环。我查了一下,显然这通常是由 mysql 查询的语法错误引起的。然而,这里不是这种情况; mysql 正确地从数据库中提取第一行,while 循环运行一次。如果我将 while 替换为 if 它没有抱怨并打印出一行。我还尝试在 practice_calendar_times 中删除除一行之外的所有内容,但仍然收到警告消息。但是,当我删除所有行时,它不会打印警告。

关于如何让 while 循环遍历表并停止抱怨的任何想法?

【问题讨论】:

  • 你能否在 mysql_query 行(分号前)中添加或删除(mysql_error ()),看看它是否返回错误。如果是,那是什么?
  • Meagar,是的,你是对的!循环非常大,我有一个我什至没有考虑过的内部查询,它正在重新分配 $result。请将您的建议作为答案发布,以便我接受。
  • 如果您要给出向下箭头,请至少说明原因。

标签: php mysql


【解决方案1】:

您是否正在更改 while 循环主体中 $result 的值?为什么不在它之后将其更改为 ifvar_dump($result) 以确保它仍然是资源?

【讨论】:

    【解决方案2】:

    你在$sql的定义中有一个狂野的;

    你得到第一个结果正确吗?

    【讨论】:

    • 是的,我从表格中得到一个结果。我100%确定这不是侥幸。分号应该是 sql 查询中的有效字符。
    • 好的,在这种情况下你可以添加: echo mysql_num_rows($result);在 while 之前查看行数是否实际上大于 1,如果是,那么可能是循环内部的某些东西影响了结果。
    • 分号无关。这是一个非常可疑的投票。
    • @meagar 分号只是一个评论,我想询问信息以便做出回应,当时我仍然无法评论问题
    【解决方案3】:

    尝试删除查询中的分号.. 所以只是

    $sql = "SELECT * FROM practice_calendar_times";
    

    【讨论】:

    • 不行。仍然收到相同的警告消息。
    • 分号无关。这是一个非常可疑的投票。
    猜你喜欢
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 2011-04-24
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多