sql语句为

SELECT
    COUNT(id) AS tp_count 
  FROM
    `tableName` 
  WHERE
    `status` = 0 
    AND `source` = 1 
    AND (
      `end_time`-`add_time` > 2592000 
      AND `end_time`-`add_time` <= 5184000 
    ) LIMIT 1

发生报错如下

PDOException:SQLSTATE [HY000]:常规错误:2014在其他未缓冲的查询处于活动状态时无法执行查询。
考虑使用PDOStatement :: fetchAll()。
或者,如果您的代码只是针对mysql运行,则可以通过设置PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY属性来启用查询缓冲。

在google查找报错信息,各种改配置,优化 sql,没有明确办法

在阿里云 SDN上执行 sql,发现报错

Data truncation: BIGINT UNSIGNED value is out of range in '(`end_time`-`add_time` > 2592000 
     AND `end_time`-`add_time` <= 5184000 
   )'

经过排查发现,有的数据中end_time小于 add_time,所以 sql 条件运算为负值,产生 BIGINT UNSIGNED 报警,于是修改 sql 如下

SELECT
    COUNT(id) AS tp_count 
  FROM
    `tableName` 
  WHERE
    `status` = 0 
    AND `source` = 1 
    AND `end_time` > `add_time`
    AND (
      `end_time`-`add_time` > 2592000 
      AND `end_time`-`add_time` <= 5184000 
    ) LIMIT 1

则问题解决

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。