mysqli_query 返回 false 而不是 1 行

我不明白为什么 mysqli_query 返回 false,我在互联网上搜索了很多,但没有找到任何东西。


我的代码:


$M1 = "SET @Month = month(TIMESTAMPADD(month, -1, CAST(now() AS DATE)));    

Set @firstDay = CONCAT('01','/', @month, '/',year(now())); SET @lastDay = 

last_day(TIMESTAMPADD(month, -1, CAST(now() AS DATE))); SELECT count(*) 

AS M1 FROM APPEL where CAST(D_CREATION AS DATE) BETWEEN @firstDay and 

@lastDay";


$connexion = cnx();

if ($connexion) 

{

  $result = mysqli_query($connexion, $M1);

  if($result)

  {

    $row = mysqli_fetch_assoc($result); // This is Line 55

    $_SESSION['ArrayMois'][0] = implode($row);

  }

  else

  {

    $_SESSION['ArrayMois'][0] = 0;

  }   

}

错误是:


警告:mysqli_fetch_assoc() 期望参数 1 为 mysqli_result,布尔值在第 55 行给出...


这个查询总是返回,false但如果我在 PHPMyAdmin 中执行它,我会返回一行。


守着星空守着你
浏览 363回答 1
1回答

慕慕森

1) MySQL报告日志位置2) 阅读此答案以了解如何生成和读取 MySQL 错误报告。对于您的代码:$row = mysqli_fetch_assoc($result)       or error_log("MYSQL Error on line ". __LINE__.          " :: ".print_r(mysqli_error($connection),true));更新:你说:警告:mysqli_fetch_assoc() 期望参数 1 为 mysqli_result,布尔值在第 55 行给出...你的错误意味着什么:这意味着查询没有按预期工作,因此:$result = mysqli_query($connexion, $M1)           or error_log("MYSQL Error on line ". __LINE__.              " :: ".print_r(mysqli_error($connection),true));问题:您在一个MySQL_query查询处理程序中运行多个单独的 SQL 查询,默认情况下在大多数情况下是不允许的。也许您已将 SQL 设置为接受串联查询,但通常这是不明智的,而且可能性较小。选择。您可以创建PROCEDURE、FUNCTION 或类似的.您也不会将列名括在反引号中,这是非常可取的。修复您的 SQL:目前你有:SET @Month = month(TIMESTAMPADD(month, -1, CAST(now() AS DATE)));  Set @firstDay = CONCAT('01','/', @month, '/',year(now())); SET @lastDay = last_day(TIMESTAMPADD(month, -1, CAST(now() AS DATE))); SELECT count(*) AS M1 FROM APPEL where CAST(D_CREATION AS DATE)        BETWEEN @firstDay and @lastDay";这可以写得更简洁:SELECT COUNT(*) as M1 FROM APPEL WHERE CAST(`D_CREATION` AS DATE) BETWEEN(LAST_DAY(CURDATE() - INTERVAL 1 MONTH) + INTERVAL 1 DAY) AND LAST_DAY(CURDATE())这将列出当月第一天和最后一天之间的所有结果。我是从你的代码是什么你究竟想达到尚不清楚,但看来你可能希望以前一个月的上市,在这种情况下,你可以使用:SELECT COUNT(*) as M1 FROM APPEL WHERE CAST(`D_CREATION` AS DATE) BETWEEN(LAST_DAY(CURDATE() - INTERVAL 2 MONTH) + INTERVAL 1 DAY) AND LAST_DAY(CURDATE() - INTERVAL 1 MONTH)
打开App,查看更多内容
随时随地看视频慕课网APP