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

Twitter_logo_blue

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

目次

問題のおさらい

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

[php]
$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
)
);
[/php]

tw_isset1
tw_isset2

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

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

isset関数

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

issetをそのまま使う

[php]
":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 : ""),
[/php]

tw_isset3
tw_isset4

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

!issetにする

[php]
":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 ),
[/php]

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

is_null

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

[php]
":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),
[/php]

tw_isset5
tw_isset6

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

empty

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

[php]
":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),
[/php]

tw_isset7
tw_isset8

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

〔参考サイト〕

Twitter_logo_blue

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次