2012-04-04 129 views
0

這是我在這個網站,所以我很抱歉提前如果有些東西在格式化:)轉換失敗

出來怪異約後的第一篇文章一週搜索互聯網尋找這個問題的答案我想我會給這個網站一個嘗試,因爲它幫助我無數次在過去。

無論如何,我最近開始使用PHP中的PDO與我一直在研究的項目中的MS SQL數據庫進行交互。其中一個表的設置方式基本上都是數字,日期時間和字符字段。我的問題是與日期字段。我正在編寫的腳本是從一個表中複製一行並將其放入另一個具有其自己的ID的文本中 - 我得到的錯誤是因爲原始表具有NULL值,因爲該表中的數據變化很大,的字段是NULL。

爲了解決這個問題,我嘗試了很多不同的方法來獲得NULL值,我寫了一個函數,它用零代替所有的空值。這工作正常,除了日期值 - 註釋它們之後插入語句的工作,因爲它應該 - 然而,他們在我得到「轉換日期時間從字符串轉換失敗。」錯誤,可能是因爲數據庫無法將'0'轉換爲日期時間值。

我該如何解決這個問題?

這是替換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>"; 
}  

}

+0

只是要清楚:如果日期爲NULL,應該插入目標表中的什麼?你是否需要在複製時用空字符串或'0'代替NULL,或者你的目標表中是否只有'NULL'值? – Basti 2012-04-04 23:02:32

回答

0

歡迎計算器! :-)

設置默認值NULL

你可以做

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

爲一列設置默認值,如果是NULL。如果不是NULLdefault value for this column,則返回值爲myColumn

例子:獲取當前的日期,如果在表中的日期表之間NULL

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

複製的元組在MySQL

我也認爲你不需要PHP複製的元組從一張桌子到另一張桌子。請參閱MySQL的INSERT INTO SELECT

示例:假設你有sourcedestination都與一個自動遞增主鍵id和列date允許NULL值。

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

這將從表source選擇所有date S和它們插入到destination創建一個新的ID,每個新創建的元組。這也將保留NULL值。

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