簡體   English   中英

使用 PHP 和 PDO 與 MS SQL 從字符串轉換日期時間時轉換失敗

[英]Conversion failed when converting datetime from character string using PHP and PDO with MS SQL

這是我在這個網站上的第一篇文章,所以如果格式有些奇怪,我提前道歉:)

在 inte.net 上搜索這個問題的答案大約一周后,我想我應該試試這個網站,因為它在過去幫助了我無數次。

無論如何,我最近開始在 PHP 中使用 PDO 與我一直從事的項目中的 MS SQL 數據庫進行交互。 其中一個表的設置方式基本上幾乎都是數字、日期時間和字符字段。 我的問題是日期字段。 我正在編寫的腳本是為了從一個表中復制一行並將其放入另一個具有自己的 ID - 我收到錯誤是因為原始表具有 NULL 值,因為該表中的數據變化很大並且許多默認值的字段是 NULL。

為了解決這個問題,在嘗試了很多不同的方法來讓 NULL 值起作用之后,我寫了一個 function 將所有 null 值替換為零。 除了日期值外,這工作正常 - 在將它們注釋掉后,插入語句可以正常工作 - 但是有了它們,我得到“從字符串轉換日期時間時轉換失敗”。 錯誤,大概是因為數據庫無法將“0”轉換為日期時間值。

我將如何解決此問題 go?

這是我的 function 替換了 NULL 值。 我覺得我還應該注意,如果我只保留值 NULL,我會在將數據類型 nvarchar 轉換為數字時出錯。 錯誤。

function check_empty($field, $slno){
try{
    require("assets/dbcnct.php");

    $stmt = $DBH->prepare(" select ". $field ." from timeticket where slno = :slno ");  

    $stmt->bindParam(':slno', $slno);

    $stmt ->execute();  

    $result = $stmt->fetch(PDO::FETCH_ASSOC);

    echo "<pre>";
    var_dump($result);
    echo "</pre>";

    foreach($result as $key=>$val){
            if(empty($val)){
                    $val = 0;
            }   
    }   
    return trim($val);

}
catch(PDOException $e) {  
    echo "<pre>";
    echo $e->getMessage();  
    echo "</pre>";
}       

}

歡迎來到 Stackoverflow::-)

NULL值設置默認值

你可以做

SELECT IFNULL(`myColumn`, 'default value for this column') as `myColumn` ...

為列設置默認值,如果它是NULL 如果它不是NULL ,這將返回myColumn的值,否則返回default value for this column

示例:如果表中的日期為NULL ,則獲取當前日期

SELECT IFNULL(`myDateColumn`, NOW()) as `myDateColumn` ... 

在 MySQL 中的表之間復制元組

我還認為您不需要 PHP 將元組從一個表復制到另一個表。 請參閱 MySQL 的INSERT INTO SELECT

示例:假設您的sourcedestination都具有自動遞增的主鍵id和允許NULL值的列date

INSERT INTO `destination` (`id`, `date`) SELECT NULL, `date` FROM `source`

這將 select 來自表source的所有date ,並將它們插入到destination中,為每個新創建的元組創建一個新 ID。 這也將保留 NULL 值。

這是在表之間復制元組的首選解決方案。 因為在 MySQL 和 PHP 之間實際上沒有數據傳輸,所以這將非常快,即使對於大量的元組也是如此。

暫無
暫無

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

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