簡體   English   中英

PDO 語句選擇日期小於錯誤的位置

[英]PDO statement select where date less than error

我花了 2 天時間試圖解決這個問題 - 當我嘗試使用<=小於或等於運算符綁定值時,我在 MySQL 中的日期比較不起作用。

我已將其縮小到第二個日期字段(從一個更復雜的腳本中,該腳本根據請求更改准備好的語句 joins/groups/fields/conditions..因此我指的是 table.column 並僅從一個中選擇下表 - 無論哪種方式都有效)但我無法理解。 用於在 php 5.x 上運行的確切代碼,但我剛剛升級到 php7.2.27。

以下面的 SQL 語句為例:

$sth = $this->prepare("SELECT 
                        transaction.transactionid,
                        transaction.accountid,
                        transaction.userid,
                        transaction.billdate,
                        transaction.amount,
                        transaction.description,
                        transaction.confirmed
                    FROM transaction
                    WHERE    
                        DATE(`billdate`) BETWEEN :startdate AND :enddate #date('2020-03-12')
                    ORDER BY billdate desc");    

嘗試將以下內容綁定到它:

$terms = array(':startdate' => "2000-01-01",':enddate' => "2020-03-12");



foreach ($terms as $key => $value) {    
    if($value == (int)$value)
        $sth->bindValue("$key", $value, PDO::PARAM_INT);
    else
        $sth->bindValue("$key", $value);
}

var_dump($sth);
var_dump($terms);

$sth->execute();
$this->rowCount = $sth->rowCount(); 
var_dump( $sth->fetchAll(PDO::FETCH_ASSOC));

這將返回一個空數組。

該表包含少量測試行。 以下正確返回:

 ... 
                DATE(`billdate`) BETWEEN :startdate AND '2020-03-12'
                ORDER BY billdate desc

將日期包裝在date('date')似乎沒有什么區別。

我也試過這個...

  DATE(`billdate`) >= :startdate AND 
  DATE(`billdate`) <= '2020-03-12'
                ORDER BY billdate desc
                ");    

(當然,更改綁定條款,以便它們反映我使用的任何內容)

我需要能夠綁定兩個變量。

感謝任何指針,因為我很想避免浪費另一天調試這個! 謝謝

只是CASTDATE

WHERE billdate
BETWEEN CAST(:startdate AS DATE) AND CAST(:enddate AS DATE)"

並綁定為PDO::PARAM_STR

$sth->bindValue("startdate", "2000-01-01", PDO::PARAM_STR);
$sth->bindValue("enddate", "2020-03-12", PDO::PARAM_STR);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM