Php mysqli_查询返回false而不是1行

Php mysqli_查询返回false而不是1行,php,mysql,mysqli,Php,Mysql,Mysqli,我不明白为什么mysqli_查询返回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

我不明白为什么mysqli_查询返回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_结果,布尔值在。。。在线55

此查询始终返回
false
,但如果在PHPMyAdmin中执行,则返回一行

1)MySQL

2) 了解如何生成和读取MySQL错误报告

对于您的代码: 更新: 你说:

警告:mysqli_fetch_assoc()要求参数1为mysqli_结果,布尔值在。。。在线55

您的错误意味着什么: 这意味着查询未按预期工作,因此:

$result = mysqli_query($connexion, $M1) 
          or error_log("MYSQL Error on line ". __LINE__. 
             " :: ".print_r(mysqli_error($connection),true));

这些问题: 您正在一个
MySQL\u query
query处理程序中运行多个单独的SQL查询,默认情况下,大多数情况下不允许这样做。也许您已经将SQL设置为接受连接查询,但通常这是不明智的,而且不太可能

另类。您可以创建一个

您也没有将列名用反勾号包装,这是非常明智的


Fxing您的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)

谢谢,但是如果我使用$M2(与$M1相同,但只需再使用一个月),mysql_查询将返回false,而他必须正常返回true,因为如果我接受查询并在phpmyadmin中执行它,我将返回一行。非常感谢!!我理解它为什么不起作用。是的,我要上个月的清单。
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)