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

则问题解决

05-07 15:08
查看更多