MySQLから得られたデータをphpで扱うことについての質問です。


例えば、「通勤中気がついたこと」のデータがあるとします。入力は気がついたことがあった時は、テキストで何か書きます。(「イコカを家に忘れた」とか)気がついたことがない日は、何も記入せず、データベースでは null になってます。

これをwebに表示する場合、null の場合は、何も処理をせず、not null (テキストが存在する)の場合は、echo でその中身を表示するようにしたいと思っています。その場合、次のやり方でいいのでしょうか?

php の中で、MySQLの null と not null をどう扱っていいのかが分からず困っています。


if ($row["notice"]){
echo "<br>通勤中気がついたこと:";
echo $row["notice"];
}

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/05/07 22:55:21
  • 終了:2007/05/09 11:30:21

ベストアンサー

id:gekikawa No.1

gekikawa回答回数110ベストアンサー獲得回数112007/05/08 07:16:15

ポイント30pt

基本的にはOKです。わたしも(DBに関わらず)良くその方法で書いています。

ただ細かいこと(or大事なこと?)をいうと

$row["notice"]がfalseと判定されてしまう値を持っていると意図に反してしまいます。

具体例は数字の「0」などです。(この数字は表示されることはありません)

書籍で知った方法ですが、このような場合に

if( strlen($row["notice"]) ){

としておけば良さそうですね。

マニュアルでのNULLの説明は

http://mysql2.mirrors-r-us.net/doc/refman/4.1/ja/working-with-nu...

id:sun-chan

ありがとうございます。

strlen って知りませんでした。ご紹介のページをじっくり読んでみます。


ところで昨日の夜寝る前に読んでいた本で、issetというのがあって、それも使えそうかなあと思ってました。

→追記です。issetではあまりうまくいきませんでした。

教えていただいたstrlenでは、中身がないときは false を返してくれるので、希望していた通りの動作になりました。

2007/05/09 11:28:38

その他の回答(3件)

id:gekikawa No.1

gekikawa回答回数110ベストアンサー獲得回数112007/05/08 07:16:15ここでベストアンサー

ポイント30pt

基本的にはOKです。わたしも(DBに関わらず)良くその方法で書いています。

ただ細かいこと(or大事なこと?)をいうと

$row["notice"]がfalseと判定されてしまう値を持っていると意図に反してしまいます。

具体例は数字の「0」などです。(この数字は表示されることはありません)

書籍で知った方法ですが、このような場合に

if( strlen($row["notice"]) ){

としておけば良さそうですね。

マニュアルでのNULLの説明は

http://mysql2.mirrors-r-us.net/doc/refman/4.1/ja/working-with-nu...

id:sun-chan

ありがとうございます。

strlen って知りませんでした。ご紹介のページをじっくり読んでみます。


ところで昨日の夜寝る前に読んでいた本で、issetというのがあって、それも使えそうかなあと思ってました。

→追記です。issetではあまりうまくいきませんでした。

教えていただいたstrlenでは、中身がないときは false を返してくれるので、希望していた通りの動作になりました。

2007/05/09 11:28:38
id:negi_1126 No.2

ねぎ回答回数30ベストアンサー獲得回数22007/05/08 07:41:20

ポイント23pt

http://www.phppro.jp/news/288

変数が空であるか調べる予約語があるらしいので、下記のように記述すればOKだと思います。

if (!empty($row["notice"])) {

 echo "<br>通勤中気がついたこと:"; //←<>は半角に直してください

 echo $row["notice"];

}

id:sun-chan

そんな予約語があったんですね。便利ですね。

ありがとうございました。

2007/05/08 07:58:39
id:Yota No.3

Yota回答回数453ベストアンサー獲得回数282007/05/08 09:03:02

ポイント20pt

わたしなら下のようなクエリで検索をしてSQLレベルで解決します。

>SELECT COALESCE(column名,'データなし') AS column名 FROM table名 ;

http://dev.mysql.com/doc/refman/4.1/ja/comparison-operators.html

id:sun-chan

ありがとうございます。


そういう方法もあるんですねー。


欲しいデータが、hizuke, notice, walking_minutes, train などと複数で、そのうち null 値が入っているのが、notice だけなんですが、


その場合は、hizuke, walking_minutes, train はまた別に sqlの命令文を書いて呼び出すことになるんですよね?

2007/05/08 09:17:51
id:Yota No.4

Yota回答回数453ベストアンサー獲得回数282007/05/08 11:14:20

ポイント20pt

欲しいデータが、hizuke, notice, walking_minutes, train などと複数で、そのうち null 値が入っているのが、notice だけなんですが、

その場合は、hizuke, walking_minutes, train はまた別に sqlの命令文を書いて呼び出すことになるんですよね?


SELECT notice, walking_minutes, train,COALESCE(notice,'データなし') AS notice FROM テーブル名 ;

でいいと思いますが、やってみてください。

http://www.dummy/

id:sun-chan

補足ありがとうございます。

いろいろ試してみますね。

2007/05/08 11:28:15
  • id:gekikawa
    希望通りの振る舞いでよかったです。

    isset()は多くの書籍でも利用されているのですが、私の場合も
    strlen()の方が希望に近い動作をしてくれています。
  • id:sun-chan
    gekikawaさん、ありがとうございます。

    長さをはかる関数なのに、中身がないと false を返してくれるなんて、便利ですね!> strlen()

    いろいろ使えそうで、しっかり覚えておかなきゃ!と思いました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません