2012-04-04 13 views
0

これは、いくつかのものを約後の書式設定:)変換に失敗しました

に奇妙出てくるならば、私は事前に申し訳ないので、このサイト上の私の最初の投稿ですこの問題の答えをインターネットで検索して1週間私はこのウェブサイトを試してみると思いました。

とにかく、私は最近、私が取り組んでいるプロジェクトのMS SQLデータベースと対話するためにPHPでPDOを使用し始めました。テーブルの1つが設定される方法は、本質的にほとんどすべての数値、日時、および文字フィールドです。私の問題は日付フィールドです。私が書いているスクリプトは、1つのテーブルから行をコピーし、それを別のテーブルにコピーすることです。元のテーブルのデータがそのテーブルのデータが大きく変更され、多くのテーブルのデフォルトがNULLであるため、のフィールドはNULLです。

この問題を解決するには、NULL値を得るためにかなり多くのことを試してみるために、すべてのヌル値をゼロで置き換える関数を書いています。これは、日付の値を除いて正常に動作します - それらをコメントアウトした後で、insert文はうまくいきます。しかし、その中では、 "datetimeを文字列から変換すると変換に失敗しました。エラーは、おそらくデータベースが '0'をdatetime値に変換できないためです。

どうすればこの問題を修正できますか?

これは、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'の場合、宛先テーブルに何を挿入する必要がありますか?コピーするときに 'NULL'を空文字列または' 0'に置き換える必要がありますか、またはあなたは 'NULL'値をあなたの目的地テーブルにも入れることができますか? – Basti

答えて

0

のStackOverflowへようこそ! :-)既定値を設定する

NULL

のためのあなたはそれがNULLであれば、列のデフォルト値を設定する

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

を行うことができます。それ以外の場合NULLdefault value for this columnでない場合はmyColumnの値が返されます。

例:表内の日付は、MySQL

のテーブル間のNULL

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

コピータプルであれば、現在の日付を取得します。私はまた、あなたがタプルをコピーするPHPを必要としないことだと思いますあるテーブルから別のテーブルへMySQLのINSERT INTO SELECTを参照してください。

例:あなたは自動インクリメントの主キーidNULL値を許可する列datesourcedestinationの両方を持っていると仮定。

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

これは、テーブルsourceからすべてのdate Sを選択して、新しく作成された各タプルに対して、新しいIDを作成destinationにそれらを挿入します。これにより、NULL値も保持されます。

これは、テーブル間のタプルのコピーに適したソリューションです。 MySQLとPHPの間で実際にデータが転送されないため、膨大な量のタプルに対しても非常に高速です。

関連する問題