
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で質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLで特定の項目の重複のみを排...
-
php mysql で WHERE句内に変数...
-
DataGridView 右詰め
-
DataViewで複数条件の...
-
fgetcsvでCSVを取得した際のnul...
-
バッチでcsvファイルの指定のカ...
-
フィルターかけた後、重複を除...
-
差し込み後、元データを変更し...
-
for whichの使い方
-
INSERT文でフィールドの1つだ...
-
カーソル宣言をIFで分けられま...
-
SELECT 文 GROUP での1件目を...
-
エクセルで最後の文字だけ置き...
-
ビュー情報(user_views)の参...
-
SQLで列名を変数にできないでし...
-
列番号による項目の取得について
-
'internal' のシステム メモリ...
-
エクセルの関数について教えて...
-
列のヘッダーを含めるのをデフ...
-
エラー 1068 (42000): 複数の主...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLで特定の項目の重複のみを排...
-
バッチでcsvファイルの指定のカ...
-
DataViewで複数条件の...
-
リストビューの項目の内容を変...
-
php mysql で WHERE句内に変数...
-
DataGridView 右詰め
-
COBOLについて
-
【VBA】特定の文字列を含む場合...
-
初心者)DataGridViewの入力桁...
-
COBOL プログラミング
-
fgetcsvでCSVを取得した際のnul...
-
FormulaR1C1でSUMIF変数指定
-
Zend_DBを使ったselectで文字が...
-
[WHS]定数宣言の際にリテラル文...
-
C# リストビューの値を取得
-
テキスト幅にあわせた表の作り...
-
リストボックス
-
Sheet3から2つの条件でオートフ...
-
前回ご教授いただいたコードに...
-
「○」が付いてる祝日以降の「A...
おすすめ情報