1. TOPTOP
  2. Webサービス
  3. Twitter

TwitterAPIの画像をデータベースに格納するために変数操作関数のissetを使う。その他is_nullとかemptyについて

Twitter_logo_blue

先日、TwitterAPIのツイートに添付している画像をデータベースに格納するという記事(新しいタブで開く)の続きです。問題点をSNS上に投げて「ひとりつっこみ」をしていたところ、親切な方からアドバイスをいただくことができました。

問題のおさらい

Twitterの仕様である最大4枚の画像取得に対して、2枚の画像添付があるツイートを格納することを想定しています。問題となっている箇所のコードは、以下の通りです(詳しくはこちら(新しいタブで開く))。

$stmt->execute(
            array(
                ":tw_txt" => $tweet->text,
                ":tw_img0" => $tweet->extended_entities->media[0]->media_url,
                ":tw_img1" => $tweet->extended_entities->media[1]->media_url,
                ":tw_img2" => $tweet->extended_entities->media[2]->media_url,
                ":tw_img3" => $tweet->extended_entities->media[3]->media_url
                )
            );

tw_isset1
tw_isset2

上の画像はコードを実行したときの、テーブルの中身です。画像が入っていないところにNULL値が入っています。一方、下の画像はブラウザ上での表示です。2つのNotice: Undefined offsetが表示されています。

調べていると、NULL値やエラーの問題については、isset,is_null,emptyなどのPHPの変数操作関数を使えば良いことが分かってきました。

isset関数

issetは変数がセットされていること、そして NULL でないことを検査します。

issetをそのまま使う

":tw_txt" => (isset($tweet->text) ? $tweet->text : ""),
":tw_img0" => (isset($tweet->extended_entities->media[0]->media_url) ? $tweet->extended_entities->media[0]->media_url : ""),
":tw_img1" => (isset($tweet->extended_entities->media[1]->media_url) ? $tweet->extended_entities->media[1]->media_url: ""),
":tw_img2" => (isset($tweet->extended_entities->media[2]->media_url) ? $tweet->extended_entities->media[2]->media_url :""),
":tw_img3" => (isset($tweet->extended_entities->media[3]->media_url) ? $tweet->extended_entities->media[3]->media_url : ""),			

tw_isset3
tw_isset4

取得した画像は2枚だけなので、tw_img2とtw_img3は何も入りません。従って、それぞれ空文字になっています。ブラウザ上でもエラーは表示されません。

!issetにする

":tw_txt" => (!isset($tweet->text) ? "" : $tweet->text),
":tw_img0" => (!isset($tweet->extended_entities->media[0]->media_url) ? "": $tweet->extended_entities->media[0]->media_url ),
":tw_img1" => (!isset($tweet->extended_entities->media[1]->media_url) ? "": $tweet->extended_entities->media[1]->media_url ),
":tw_img2" => (!isset($tweet->extended_entities->media[2]->media_url) ? "" : $tweet->extended_entities->media[2]->media_url),
":tw_img3" => (!isset($tweet->extended_entities->media[3]->media_url) ? "" : $tweet->extended_entities->media[3]->media_url ),

ちなみに、”!(びっくりマーク)“を使ってissetを否定し、三項演算子内の中身を逆にすると、同じ結果が返ります。

is_null

is_nullは、変数が NULL かどうか調べます。

":tw_txt" => (is_null($tweet->text) ? "" : $tweet->text),
":tw_img0" => (is_null($tweet->extended_entities->media[0]->media_url) ? "" : $tweet->extended_entities->media[0]->media_url),
":tw_img1" => (is_null($tweet->extended_entities->media[1]->media_url) ? "" : $tweet->extended_entities->media[1]->media_url),
":tw_img2" => (is_null($tweet->extended_entities->media[2]->media_url) ? "" : $tweet->extended_entities->media[2]->media_url),
":tw_img3" => (is_null($tweet->extended_entities->media[3]->media_url) ? "" : $tweet->extended_entities->media[3]->media_url),

tw_isset5
tw_isset6

is_nullで調べるのはNULL値だけなので、ブラウザ上では、”Notice: Undefined offset”が返ってきます。

empty

emptyは変数が空であるかどうかを検査します。

":tw_txt" => (empty($tweet->text) ? "" : $tweet->text),
":tw_img0" => (empty($tweet->extended_entities->media[0]->media_url) ? "" : $tweet->extended_entities->media[0]->media_url),
":tw_img1" => (empty($tweet->extended_entities->media[1]->media_url) ? "" : $tweet->extended_entities->media[1]->media_url),
":tw_img2" => (empty($tweet->extended_entities->media[2]->media_url) ? "" : $tweet->extended_entities->media[2]->media_url),
":tw_img3" => (empty($tweet->extended_entities->media[3]->media_url) ? "" : $tweet->extended_entities->media[3]->media_url),

tw_isset7
tw_isset8

issetと同じくNULL値は表示されず、エラーも表示されません。ただ、個人的にはiset関数の方が見慣れていますので、emptyではなくissetを使いたいと思います。

〔参考サイト〕