【问题标题】:MySQL Variables and PDOMySQL 变量和 PDO
【发布时间】: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,我会返回数据。这就是让我相信它与变量有关的原因。

标签: php mysql pdo


【解决方案1】:

我不确定为什么会出现这个问题,但我能够通过在之前的查询中将变量设置为默认值来获取数据。

  $var_query = $online_link->query('SET @dump = 0, @num_logins = 0, @prev_login = 0');

只要在主查询之前执行,一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-31
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 2016-11-13
    • 2017-08-21
    • 1970-01-01
    相关资源
    最近更新 更多