0

これはこのサイトでの私の最初の投稿ですので、書式設定で何かおかしくなった場合は事前に申し訳ありません:)

この問題に対する答えをインターネットで約 1 週間検索した後、過去に数え切れないほど助けられたので、この Web サイトを試してみることにしました。

とにかく、私は最近、取り組んでいるプロジェクトで MS SQL データベースと対話するために PHP で PDO を使い始めました。テーブルの 1 つが設定される方法は、基本的にほぼすべての数値、日時、および文字フィールドです。私の問題は日付フィールドにあります。私が書いているスクリプトは、あるテーブルから行をコピーし、それを独自の ID で別のテーブルに配置するように作成されています。元のテーブルには NULL 値が含まれているため、そのテーブルのデータが頻繁に変更され、多くの場合のデフォルトが変更されるため、エラーが発生していました。フィールドの 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>";
}       

}

4

1 に答える 1

-1

スタックオーバーフローへようこそ! :-)

値のデフォルト値のNULL設定

できるよ

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

の場合、列のデフォルト値を設定しますNULL。これは、そうでない場合とそうmyColumnでない場合の値を返します。NULLdefault value for this column

例: テーブルの日付が次の場合、現在の日付を取得します。NULL

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

MySQL のテーブル間でタプルをコピーする

また、あるテーブルから別のテーブルにタプルをコピーするのに PHP は必要ないと思います。MySQL のINSERT INTO SELECTを参照してください。

例:自動インクリメント主キーと値を許可する列の両方があるsourceと仮定します。destinationiddateNULL

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

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

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

于 2012-04-04T22:33:22.000 に答える