【发布时间】:2015-07-29 21:09:23
【问题描述】:
我在使用 MySQL 变量的 PDO 查询时遇到问题。我已经在 MySQL 工作台中执行了这个查询,也直接从通过 MySQL 通用日志处理和存储的内容中执行了这个查询并获得了结果。当它通过 PDO 运行时,我的 rowCount() 返回 0。
我检查了错误日志并尝试/捕获 PDOException,但那里什么也没有。我还研究了将 MySQL vars 与 PDO 一起使用的问题,但据我发现应该没有任何问题。
这里是查询:
$mobile_query = $online_link->prepare('SELECT
T.full_date,
T.login_count
FROM (
SELECT
M.Process_Date as full_date,
M.Nbr_Success_Sigon,
@dup := CASE WHEN @prev_login <> M.Nbr_Success_Sigon THEN 1 ELSE (@dup+1) END AS reset,
@num_logins := (M.Nbr_Success_Sigon - @prev_login) as login_count,
@prev_login := M.Nbr_Success_Sigon
FROM mobile_tran M
WHERE
M.CIS_No = :cis AND
M.Process_Date >= :start_date + INTERVAL -' . $date_interval . ' DAY AND
M.Process_Date < :start_date
)as T
WHERE T.reset = 1 AND T.login_count > 0');
try {
$mobile_query->execute(array(':cis'=>$cis, ':start_date'=>$start_date));
} catch(PDOException $e) {
$logger->error($e->getMessage());
}
数据集是每天一次登录的滚动计数。我只想返回计数发生变化的天数。
例如:
07-01 - 0
07-02 - 0
07-03 - 1 (<- I want to return this record)
07-04 - 1
07-05 - 3 (<- I want to return this record)
在使用 MySQL 变量时,PDO 是否存在某种奇怪的限制?
【问题讨论】:
-
可能不是 SQL 变量。 PDO 默认不支持
rowCount用于 SELECT 查询(因为其他驱动程序的支持参差不齐)。但是有::MYSQL_ATTR_FOUND_ROWS。或者当 fetching 结果时查询真的什么也没返回? -
您是否尝试过将此变量“$date_interval”作为命名参数从数组中进行查询
-
我也尝试从查询中获取数据。没有什么。 $date_interval 调用不是问题,因为我在其他不涉及 MySQL 变量的查询中使用相同的 WHERE 语句。他们工作正常。如果我要删除所有 MySQL 变量并只返回 Process_Date 和 Nbr_Success_Sigons,我会返回数据。这就是让我相信它与变量有关的原因。