2017-07-04 41 views
0

我想從我的數據庫表中獲得列的總和。但我只得到0.00。我的代碼是:如何在PDO查詢中獲得列的總和

$total_income_query = $db->prepare("select sum(credit) from accounts WHERE STR_TO_DATE(date, '%d/%m/%Y') BETWEEN STR_TO_DATE(:startDate, '%d/%m/%Y') AND STR_TO_DATE(:endDate, '%d/%m/%Y')"); 

$stmt->bindParam(':startDate',$startDate); 
$stmt->bindParam(':endDate',$endDate); 
$stmt->execute(); 

$total = $stmt->fetch(PDO::FETCH_NUM); 

echo $total_income = $total[0]; 

它應該回顯306700.80。我檢查了查詢。它在數據庫中正常工作,但不在我的PHP腳本中。它出什麼問題了?

+0

嘗試用'$ stmt->取(PDO :: FETCH_ASSOC);' –

+0

**向我們展示了什麼是'$ startDate'和'$ endDate' ** – RiggsFolly

+0

'您在STR_TO_DATE(:startDate,'%d /%m /%Y')和STR_TO_DATE(:endDate,'%d /%m /%Y')之間的日期已將日期列中的值更改爲某些文本看起來不像日期。因此,您無法將其與start enddate進行比較 –

回答

0

OK列,問題是我的PDO的代碼。我應該寫$ total_income_query而不是$ stmt。該代碼應該是這樣的......

$total_income_query = $db->prepare("select sum(credit) from accounts WHERE STR_TO_DATE(date, '%d/%m/%Y') BETWEEN STR_TO_DATE(:startDate, '%d/%m/%Y') AND STR_TO_DATE(:endDate, '%d/%m/%Y')"); 

$total_income_query->bindParam(':startDate',$startDate); 
$total_income_query->bindParam(':endDate',$endDate); 
$total_income_query->execute(); 

$total = $total_income_query->fetch(PDO::FETCH_NUM); 

echo $total_income = $total[0]; 
1

編輯:我的解釋是錯的,我想。但遺憾的是,不要在數據庫中重新格式化日期。 那就是:我想您存儲日期類型DATE/DATETIME

<?php 
$total_income_query = $db->prepare(" 
    SELECT SUM(credit) 
    from accounts 
    WHERE date BETWEEN STR_TO_DATE(:startDate, '%d/%m/%Y') 
       AND STR_TO_DATE(:endDate, '%d/%m/%Y')"); 

$stmt->bindParam(':startDate',$startDate); 
$stmt->bindParam(':endDate',$endDate); 
$stmt->execute(); 

$total = $stmt->fetch(PDO::FETCH_NUM); 

echo $total_income = $total[0]; 
+0

但它在數據庫中正常工作。我只是再次檢查。 「從STR_TO_DATE(日期,'%d /%m /%Y')BETWEEN STR_TO_DATE('01/05/2017','%d /%m /%Y')和STR_TO_DATE之間的帳戶中選擇總額(借項) ('31/05/2017','%d /%m /%Y')「 –

+0

日期列的類型是Varchar –

+0

告訴我們什麼類型是列日期,如果不是日期:您如何存儲信息? –