2013-05-08 85 views
1

使用下面的代碼,我無法檢查MySQL'date'列中是否存在指定的日期。如何檢查MySQL'date'列中是否存在特定日期?

$data = array(1367971200); 

$s=$dbh->prepare(" 
    SELECT DISTINCT 
     `date` 
    FROM 
     `report_coa_bal_hist` 
    WHERE 
     UNIX_TIMESTAMP(`date`) = ? 
"); 

if ($s->execute($data)) { 

    if ($s['date'] == null) { 

     return false; 
    } 

    return true; 

} 

它返回false,儘管事實上,我可以看到在phpMyAdmin中顯示的日期「2013年5月8日」。

該表本身包含該日期的70多個條目。它總是會做,如果它包含任何東西,但我只想知道它在現階段是否存在。

日期字段是MySQL'日期'類型。我懷疑這個錯誤是在我構建查詢的PDO調用時發生的。

UPDATE

更新$r['date']到`$ S [ '日期']。我懷疑,我仍然有一個問題的結構,但可能需要修復查詢,使它給我們的結果,然後再着重於此。

也嘗試直接對數據庫運行查詢並獲得空結果集,儘管能夠看到目標日期存在。仍然很困惑!

+0

你是否試過直接對數據庫運行查詢? – 2013-05-08 07:05:11

+0

'$ r ['date']'或'$ s ['date']' – 2013-05-08 07:06:02

+0

哪裏'$ r ['date']'甚至來自? – BlitZ 2013-05-08 07:07:06

回答

2

試試這個

$data = array(1367971200); 

$s=$dbh->prepare(" 
SELECT COUNT(`date`) as c_date 
FROM 
    `report_coa_bal_hist` 
WHERE 
    UNIX_TIMESTAMP(`date`) = ?"); 

if ($s->execute($data)) { 
    $result = $s->fetch(PDO::FETCH_ASSOC); 
    if ($result['c_date'] > 0) { 
     return false; 
    } 
    return true; 
} 
+1

謝謝。我正在檢查這個,但卻被意外的傳出去了。將會走了幾個小時。進一步檢查後會接受答案(我認爲這個答案可能是答案)。 – 2013-05-08 07:28:31

+1

對不起,謝謝大家的參與。這個答案是我用過的。它運作良好。謝謝Yogesh。 – 2013-05-08 12:03:18

0

你不能選擇帶有因爲它們更準確自然的UNIX時間戳(即秒)一整天,你需要的文本版本:

$data = array(date('Y-m-d', 1367971200)); 

$stmt = $dbh->prepare("SELECT COUNT(*) 
    FROM `report_coa_bal_hist` 
    WHERE `date` = ? 
"); 

$stmt->execute($data); 
$count = current($stmt->fetchAll(PDO::FETCH_COLUMN, 0)); 
return $count > 0; 

取請注意運行腳本的服務器與數據庫服務器本身之間的時區差異。

-2

有許多缺陷與你的代碼,而不是一個:你檢查你的SQL

  • 你所得到的結果
  • 的方式檢查
  • 方式的價值

    • 格式

      所以,代碼必須是

      $data = array('2013-05-07'); 
      $sql = "SELECT 1 FROM report_coa_bal_hist WHERE `date` = ? LIMIT 1"; 
      $stm = $dbh->prepare($sql); 
      $stm->execute($data); 
      return $stm->fetchColumn(); 
      
  • +0

    而不必將格式化的字符串傳遞給日期,這也應該作爲查詢(以時間戳作爲參數):SELECT ... WHERE date = DATE(FROM_UNIXTIME(?))LIMIT 1'。 'DROM_UNIXTIME(...)'將時間戳轉換爲'datetime','DATE()'將其轉換爲'date'(即從第二天降低精度)。 – Lukas 2013-05-08 07:52:52

    +0

    不是「代替」而是「也是」。日期轉換有很多方法,但這不是問題的主題。 – 2013-05-08 08:29:47

    相關問題