【问题标题】:Mysql throwing query error yet finishing query just fine-why?Mysql抛出查询错误但完成查询就好了-为什么?
【发布时间】:2023-03-03 06:51:23
【问题描述】:

我来了

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result 
resource in *filename* on line 81

在运行查询以构建图表时。该查询从 mysql db 中获取数据并使用它来构建图表。

通常,我收到此错误并转到代码并找到我搞砸的地方,修复它,然后继续。关于这个问题的棘手部分是查询实际上正在运行并且图表正在构建和准确显示。为什么我的服务器(xampp 上的 localhost)告诉我,当它可以很好地利用资源时,查询结果很糟糕?

这是完整的查询:

$chart=array();
    $roll=array();
    //select used terms
    $rosh=mysql_query("select distinct term from search_terms");

    while($roshrow=mysql_fetch_assoc($rosh)){
        extract($roshrow);
            $roll[]=$term;
        }

        //select term_number for each term
        foreach($roll as $sterm){
            $termarray=array();
                  **//following is line 81**
            $bashq="select term_number from search_terms where term ='$sterm'";
            $bash=mysql_query($bashq);
            while($brow=mysql_fetch_assoc($bash)){
                extract($brow);
                //put results into array to sum
                $termarray[]=$term_number;
            }
            $termsum=array_sum($termarray);

        //put term=>number array for chart script
            $chart[$sterm]=$termsum;

        }
        //sort array so high numbers at beginning
        arsort($chart);

        //slice top 10 terms
        $chart=array_slice($chart,0,10); 

【问题讨论】:

  • 我认为您忽略了最重要的信息,即查询本身。
  • 你为什么在那里使用 extract() ?你可以这样做: $roll[]=$roshrow['term'];
  • doofledorfer,我评论了代码中第 81 行的位置
  • mercutio...我出于习惯使用提取物。我应该阻止它

标签: php mysql


【解决方案1】:

这样做:

$rosh=mysql_query("select distinct term from search_terms")
  or die("Error with query: " . mysql_error());

还有这个:

$bash=mysql_query($bashq)
  or die("Error with query: " . mysql_error();

它会在失败时告诉你。不过您是对的,您收到该消息是因为 mysql_query 返回“false”并且不是有效的结果资源。

【讨论】:

  • 对我自己说“d-oh”。我有一个很好的习惯,就是在我的查询中包含这个,直到我变得懒惰并停止使用它。罪魁祸首?...数据库中的撇号。谢谢
【解决方案2】:

由于您在循环中进行查询,因此未处理其中一个字词(可能是因为 search_terms 缺少该特定回合的行。这很奇怪,因为您正在查询同一个表。

但是,由于它是警告,而不是致命错误,它仍会继续。

无论哪种方式,提取数据的方式似乎都是错误的,您可以使用一个查询、直接在 SQL 服务器中进行适当排序 (ORDER BY)、GROUP BY 和 SUM() 来获取您的条款的总和.

您应该改为阅读您的 SQL :)

选择术语,SUM(term_number) 作为 term_sum FROM search_terms GROUP BY 条款 ORDER BY term_sum DESC 限制 10

然后只需将其复制到您的哈希表中,它应该已经排序,并且限制为 10 个条目。

【讨论】:

  • 我应该阅读我的 sql。尝试对查询结果进行排序时,我让自己很头疼
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-20
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
  • 1970-01-01
  • 2011-08-30
相关资源
最近更新 更多