【发布时间】: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