
phpでfgetcsv関数を使用して、取得したデータをDBに登録するという作業を行いたいと考えています。
ですが、CSVでNULLの部分の取得が上手くいっていないようで、DBには「NULL」という文字列で取り込まれてしまいます。
「\N」にすることでNULLとして登録出来るという情報があったので、CSVを修正して「NULL」を「\N」にしてみたのですが、やはり「\N」という文字列として登録されてしまいました。
正常にNULLとして認識させるにはどのような対応を行えば良いのでしょうか。
よろしくおねがいします。
No.2ベストアンサー
- 回答日時:
fgetcsvでは、すべての要素が文字列として取り込まれます。
例外的に「改行のみ」の行だと要素数が1でその値がNULLになりますが、それ以外では(空文字列はあっても)NULLはありません。>CSVでNULLの部分の取得が上手くいっていない
CSVファイルで「NULLの部分」とはどういうものなのでしょうか。ちょっと想像出来ません。「空文字列」をNULLとして扱いたいということでしょうか?
この回答への補足
>CSVでNULLの部分の取得が上手くいっていない
申し訳ありません、上記の記述が良くありませんでした。
正確には私自分でもどのようにすればNULLとして受け取ってもらえるか分からなかったため、文字列でNULLと入れてみたり、「\N」と入れてみたりと試してみました。
agunuzさんが言うように、すべて文字列となってしまうのであれば、CSVに文字列でNULLと入っていた場合には、実際のNULLに変換するなどして対応するのが良いでしょうか?
回答ありがとうございます。
>fgetcsvでは、すべての要素が文字列として取り込まれます。
上記のことを参考に、CSVに保存する際はNULLを文字列として保存して、DBに保存する際は、SQLを行なう前にNULL文字列から、実際のNULLに変換するという処理を行いました。
実際はもっと良い方法があるのかもしれませんが、今のところこの方法で問題なさそうなので、こちらでいきたいと思います。
ほんとうにありがとうございました。
No.3
- 回答日時:
そもそも文字列カラムにNULLを指定する意味がないので
''(長さ0の文字)でよいような気がします。
場合によっては、「NULL」という文字列をデータ投入後
UPDATE テーブル SET カラム=NULL WHERE カラム='NULL'
のような処理でもいいかもしれません。
回答頂きありがとうございました。
DB内でカラムによっては空文字列とNULLを使い分けている部分があったので、NULLはNULL、空文字は空文字として一応分けておきたいとい考えておりました。
今回はDB登録の前にNULLを変換するという形を取りましたが、yambejpさんの記述して頂いた内容も、今後参考にさせて頂きます。
ありがとうございました。
No.1
- 回答日時:
fgetcsvで得たデータをどうやってSQLに渡そうとしていますか?
この回答への補足
フレームワークにsymfonyを使用しているので、symfonyのDB登録方法で下記のように行なっています。
if($row[0]){
// 更新
$item = Doctrine::getTable('T_USER')->find($row[0]);
} else {
// 新規
$item = new T_USER();
}
$item->setUserId($row[1]);
$item->setName($row[2]);
$item->save();
※$rowの中には1件分(CSVで1行分)のレコードが入っています。
fgetcsvでファイルを取得した際にはすでに文字列となっているようです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- PHP 空文字 "" ですが 空文字の意味を教えてください。 3 2022/08/05 03:51
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLで特定の項目の重複のみを排...
-
リストビューの項目の内容を変...
-
COBOL プログラミング
-
Eclipseのソースの色の変更につ...
-
COBOLについて
-
初心者)DataGridViewの入力桁...
-
fgetcsvでCSVを取得した際のnul...
-
バッチでcsvファイルの指定のカ...
-
OnNotifyでカーソル変化を禁止...
-
C# リストビューの値を取得
-
ListView
-
[WHS]定数宣言の際にリテラル文...
-
php mysql で WHERE句内に変数...
-
DataGridView 右詰め
-
差し込み後、元データを変更し...
-
フィルターかけた後、重複を除...
-
外部参照してるキーを主キーに...
-
Outlook 送受信エラー
-
エラー 1068 (42000): 複数の主...
-
SELECT 文 GROUP での1件目を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLで特定の項目の重複のみを排...
-
バッチでcsvファイルの指定のカ...
-
リストビューの項目の内容を変...
-
DataViewで複数条件の...
-
COBOLについて
-
php mysql で WHERE句内に変数...
-
初心者)DataGridViewの入力桁...
-
fgetcsvでCSVを取得した際のnul...
-
COBOL プログラミング
-
C# リストビューの値を取得
-
jQueryで、カラム幅を変更でき...
-
C#: ソースコードから16進数の...
-
[WHS]定数宣言の際にリテラル文...
-
一覧画面のカラムヘッダクリッ...
-
前回ご教授いただいたコードに...
-
¥編集てどうするのか教えてく...
-
ListViewの選択について
-
Zend_DBを使ったselectで文字が...
-
VB6でActiveReport1.5Jを使って...
-
DataGridView 右詰め
おすすめ情報