【问题标题】:Using pdo prepare with dates and UNION returns no results (mysql)使用带有日期和 UNION 的 pdo prepare 不返回任何结果(mysql)
【发布时间】:2014-12-22 18:57:05
【问题描述】:

我有一个准备好的 PDO 请求,它没有返回任何结果。看起来问题来自日期格式或其他东西。我在 phpmyadmin 中使用相同的值进行了尝试,一切正常并且结果显示出来,但是一旦在准备好的语句中它就不起作用了。我使用 PDO::PARAM_STR 来定义日期。

我还没有找到在准备好的语句中使用 UNION 和 DATE 的示例。

$sql2 = "(
  SELECT 
  SUM((IF(glMonthNow.debit IS NULL, 0, glMonthNow.debit))-(if(glMonthNow.credit IS NULL,0,glMonthNow.credit))) as computeMonthNow,

  SUM(case when glMonthNow.debit IS NOT NULL then 1 else 0 end) as debitCount,
  SUM(case when glMonthNow.credit IS NOT NULL then 1 else 0 end) as creditCount

  FROM tblgeneralledger_2014 AS glMonthNow
  WHERE glMonthNow.accounts_list_id=:account_id 
  AND trs_desc <> 'efa'
  AND glMonthNow.system_date>=:startMonthDate 
  AND glMonthNow.system_date<:endMonthDate
  )

  UNION 

  (
  SELECT 
  SUM((IF(glMonthNow.debit IS NULL, 0, glMonthNow.debit))-(if(glMonthNow.credit IS NULL,0,glMonthNow.credit))) as computeMonthNow,

  SUM(case when glMonthNow.debit IS NOT NULL then 1 else 0 end) as debitCount,
  SUM(case when glMonthNow.credit IS NOT NULL then 1 else 0 end) as creditCount

  FROM tblgeneralledger_2015 AS glMonthNow
  WHERE glMonthNow.accounts_list_id=:account_id AND trs_desc <> 'efa' 
  AND glMonthNow.system_date>=:startMonthDate AND glMonthNow.system_date<:endMonthDate
)";

$sql2 = $mysql_dbh->prepare($sql2);
$sql2->bindParam(":account_id",$account->id);
$sql2->bindParam(":startMonthDate",$startMonthDate,PDO::PARAM_STR);
$sql2->bindParam(":endMonthDate",$endMonthDate,PDO::PARAM_STR);
$sql2->execute();
$data2=$sql2->fetch(PDO::FETCH_ASSOC);

Example of value used:
account_id = 644;
startMonthDate = '2014-12-01';
endMonthDate= '2014-12-01'

谢谢你帮助我

【问题讨论】:

  • 结束引号在哪里? (") 和分号?
  • @Vakarm: $account->id 是错字吗?我认为是 $account_id。对吗?
  • $account->id是对象$account的参数“id”。
  • @Vakarm: $startMonthDate 已经是字符串,所以你不必使用 PDO::PARAM_STR。
  • 非常感谢@Academia。我仍然得到相同的结果。也许我应该放弃为此使用准备好的语句。

标签: mysql date pdo prepared-statement union


【解决方案1】:

占位符必须是唯一的,除非您打开了模拟。 所以不要重复每个:startMonthDate:startMonthDate2等等。

然后绑定到同一个变量,就可以了。你应该避免重新分配$sql2 变量,这是误导:

$stmt= $mysql_dbh->prepare($sql2);
$stmt->bindParam(":account_id",$account->id);
$stmt->bindParam(":startMonthDate",$startMonthDate,PDO::PARAM_STR);
$stmt->bindParam(":endMonthDate",$endMonthDate,PDO::PARAM_STR);
$stmt->bindParam(":startMonthDate2",$startMonthDate,PDO::PARAM_STR);
$stmt->bindParam(":endMonthDate2",$endMonthDate,PDO::PARAM_STR);
$stmt->execute();
$data2=$stmt->fetch(PDO::FETCH_ASSOC);

但是肯定你应该得到一个错误,这让我想知道你是否启用了错误模式到异常,在连接后放置以下行:

$mysql_dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

【讨论】:

    猜你喜欢
    • 2017-12-28
    • 2015-12-06
    • 2020-06-05
    • 2017-05-18
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    相关资源
    最近更新 更多