为了账号安全,请及时绑定邮箱和手机立即绑定

mysqli_query 返回 false 而不是 1 行

mysqli_query 返回 false 而不是 1 行

PHP
守着星空守着你 2021-08-28 09:11:15
我不明白为什么 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 中执行它,我会返回一行。
查看完整描述

1 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

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)


查看完整回答
反对 回复 2021-08-28
  • 1 回答
  • 0 关注
  • 356 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信