私は日付フィールドを含むcsvデータセットを持っています。私は空かもしれません。(='')
。私はこのフィールドにnullを許可するようにPostgresを設定し、それに日付フォーマットを与えました。 PHPインポートスクリプト(下記)を実行すると、空文字列が日付形式ではないため、インポートが失敗します。フィールドが実際に空の場合にのみ実行したいのは、NULL
に設定することです。だから私は、私は次のように働くだろうと思っている、条件付きでそれを設定したい:私はこの方法でインポートを実行すると日付フィールドが空の場合、PHPを介してPostgresSQL DBにNULLを挿入してください。
<?php if (empty($data[3])){
$data[3] = NULL;
// (i've tried "null", 'null', "NULL", null, etc.)
、日付フィールドが空の時はいつでも、私はPHP Warning: pg_query(): Query failed: ERROR: invalid input syntax for type date: "NULL"
を取得します。 PHPがNULLをpg_query
に渡すことはできませんか?クエリの中に条件付きロジックを置くべきですか?私のコードは以下の通りです。ご指摘ありがとうございました。
<?php
$conn_string = "host=localhost port=5432 dbname=mydb user=myusername password=mypassword";
$_db = pg_connect($conn_string);
$fileName = "../feeds/stale_prod_report.20111215.csv";
$row = 0;
if ($_db->connect_error) {
die('Connection Error (' . $_db->connect_errno . ') ' . $_db->connect_error);
}
if (($handle = fopen($fileName, "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
$row++;
for ($c=0; $c < $num; $c++) {
$data[$c] = pg_escape_string(utf8_encode($data[$c]));
}
//if date is empty, insert a dummy - not accepting null
if (empty($data[16])){
$data[16] = NULL;
}
if($row !== 1){
pg_query($_db, "INSERT INTO product (first_field, second_field,
third_field, my_date)
VALUES ('$data[0]', '$data[1]', '$data[2]', '$data[3]')";
}
fclose($handle);
} else {echo "Could not find the file!";}
私はpostgresqlに固有のものだと思います。[Postgresql:プリペアドステートメントを使って行を挿入して更新するときにNULL値を使用する](http:// stackoverflow。com/questions/1027499/postgresql-use-update-rows-with-prepared-stateme) - プリペアドステートメントを使用するほうがよいでしょう。エラーまたは間違ったテーブル定義です。 – hakre