webの最近の記事

php・mySQLの技術的なお話です。

これまで、mysql_connectでSQLを呼び出していたのですが、SQLインクリジョン対策がめんどくさい。とにかくめんどくさい。

「この平成の世の中で、こんな原始人みたいなチマチマした作業をする必要があるのだろうか、、、?」

と、疑問が湧いてきたので調べてみました。
すると驚くべき事実。


mysql_connect:この拡張モジュールは PHP 5.5.0 で非推奨になり、PHP 7.0.0 で削除されました。
PHP: mysql_connect - Manual


マジか。
知らんかった。←不勉強すぎ


で、調べてみるとPDOを使ってmySQLに接続するとSQLインクリジョン対策が楽と分かったので早速お勉強。
mysql - PHP での SQL インジェクション対策はどのように行いますか? - スタック・オーバーフロー

まぁ、楽勝ですわ。
『余計なことせんと、言うた通りにしたらええねん。』
と、天の声が聞こえてきそうなほどさくさくコーディングが進みました。


〜本題はここから〜


エラー周りのデバッグをしていると、どういう訳が下記のSQL文をprepareに突っ込むと、サーバが500エラーを返してくる現象に気が付きました。

$sql = "SELECT * FROM 存在しないテーブル名";
$sth = $pdo -> prepare($sql);

SQL文が間違っているからといって500エラーになるというのは、mysql_connectではなかった現象です。
「そもそも、テーブルが存在するかしないかは実行しないと分からんやないかいッ!!」

回避策を探そうにも、『テーブルが存在しなければprepareしない』という鶏が先か卵が先か的な問題で手詰まり感が半端ない。

「#php で #PDO を使って #mySQL に接続した時に、存在しないテーブル名を含んだ #SQL 文を #prepare に放り込んだ時に、500エラー出て止まるのはなんでか誰か教えろください。存在するテーブル名だと問題なく動くんですよ。」と、ツイッターに投げてみるも誰も返事なし。

「!! もしかして、そもそも、どこかでそういうエラーレベルをコントロールする設定があるのではないか?」

と、思いついてphp.iniをチェック。
ハズレ。

自分の書いたphpの1行目からよーく見てみる。

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

エラーモードって書いてあるね。
調べる。
PHP: エラーおよびエラー処理 - Manual


『デバッグ時に有用で、エラーが発生した時点で スクリプトの実行を停止させることによりコード内の問題点を 見つけやすくなります』
『// このテーブルが存在しないとして、このコードを実行すると E_WARNING レベルのエラーになります。例外にはなりません。』


ちゃんとマニュアルに書いてあるね。
デバッグ用の設定してたらそりゃぁ止まるわね。


// $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
こうしたら動きました。

Twitterの高度な検索で使われてるものと一緒。
リツイート数やお気に入り数といったことで絞込が可能。

「条件1 条件2」 条件のAND演算(両方の条件に当てはまった発言)
「条件1 OR 条件2」 条件のOR演算(どちら片方、もしくは両方に当てはまった発言)
「-条件」 条件の否定。この条件を除外する
「"単語1 単語2"」 「単語1 単語2」「単語1_単語2」「単語1-単語2」などのフレーズにマッチする。「単語2 単語1」は除外。
また、半角スペースを含むアプリ名などをフレーズでまとめて指定できる。
「from:ユーザ名」 このユーザが投稿した発言
「-from:ユーザ名」 このユーザが投稿していない発言
「to:ユーザ名」 このユーザへのリプライ。つまり先頭の「@ユーザ名 」から始まる発言
「-to:ユーザ名」 このユーザへのリプライ以外の発言。
「@ユーザ名」 このユーザへの言及(mentions)。つまり内容に「@ユーザ名」を含む発言
「-@ユーザ名」 このユーザへの言及(mentions)以外の発言。
「#タグ名」 このハッシュタグを含む発言
「-#タグ名」 このハッシュタグを含まない発言

「filter:links」 URLを含む発言のみ。
「-filter:links」 URLを含まない発言。
「include:links」 URLも含む発言。
「exclude:links」 URLを含まない発言。

「filter:hashtags」 ハッシュタグを含む発言のみ。
「-filter:hashtags」 ハッシュタグを含まない発言。
「include:hashtags」 ハッシュタグも含む発言。
「exclude:hashtags」 ハッシュタグを含まない発言。

「filter:replies」 リプライを含む発言のみ。
「-filter:replies」 リプライを含まない発言。
「include:replies」 リプライも含む発言。
「exclude:replies」 リプライを含まない発言。

「filter:retweets」 公式/非公式retweetを含む発言のみ。
「-filter:retweets」 公式/非公式retweetを含まない発言。QT形式は含む。
「include:retweets」 公式/非公式retweetも含む発言。(デフォルト)
「exclude:retweets」 公式/非公式retweetを含まない発言。QT形式は含む。

「source:アプリ名」 このアプリケーション(クライアント)で投稿された発言。
公式Webは「Web」ツイートボタンは「tweet_button」
「-source:アプリ名」 このアプリケーション(クライアント)で投稿されていない発言。
「lang:言語コード」 この言語の発言のみ。「lang:ja」で日本語の発言。
「until:YYYY-MM-DD」 指定日付以前の発言。YYYY-MM-DD形式で年月日を指定。
「since:YYYY-MM-DD」 指定日付以後の発言。YYYY-MM-DD形式で年月日を指定。
「place:opentable:ID」 OpenTableIDで指定した地域からの発言(地域情報を送っている人のみ)
「place:geocode」 geocodeで指定した地域からの発言(地域情報を送っている人のみ)
「near:地域」 その地域の発言。「near:Tokyo」など。APIでは使えない。関係ない発言が拾われることもある?
「within:距離」 nearと組み合わせる。その地域から指定距離内の発言。「within:15km」など。APIでは使えない。

久々にTIPS的なエントリーを。

Googleウェブマスター管理ツールでサイトマップを登録すれば、あれこれ考えることなくGoogle botがサイトのURLを自動的に拾ってGoogleインデックスに登録してくれるのは知っていたんですが、なにせ標準でサイトマップを構築するテンプレートがMTにはありませんので、自分で作って登録するしかありません。
で、めんどくさいと思っていたので、今まで手を付けていませんでしたが一回設定すればあとは勝手にやってくれますので、テンプレートを作成しました。意外と簡単。多分5分もあれば楽勝。


手順は以下の通り


1)以下のソースをそのままコピペしてMTのテンプレートにsitemap.xmlと言う名前で登録して再構築→サイトマップ プロトコルに基づいたサイトマップができあがります。

2)書き出されたサイトマップをGoogleウェブマスター管理ツールで登録。

3)エラーが出ていなければ2〜3週間かけて順次インデックス化されていくので気長に待つ。

4)終わり。


お手軽でしょ?

以下、ソース。

20100410.jpg

サイト制作者の意図が全く分からないものの一つに、右クリックすると「コンテクストメニューは利用できません」と表示されるORICON STYLEのようなサイト。

サイトを構築している人間であればそれを回避する方法はすぐに思い付くわけで、このJavaScriptの実装が如何に意味がないかは、自称webデザイナーレベルであれば誰でも理解できる話だと思います。

twitter_logo_header.png


やっと使い方が分かってきました。
日々つぶやいております。
やってる方いらっしゃれば是非フォローミー。
http://twitter.com/CH0PPER

MovableType5logo.jpg

MT2.0ぐらいから全く触っていなかったのでビジュアルの変化に驚く。
なんじゃこりゃー。。。

とりあえず、ちょこっとずつ触っていきますよ。


流行のワードで検索したら、そこにも広告。
amazonさん。さすがの商魂です。

ところで、硫化水素の作り方を調べてたのですがサッパリ分からず。
子供の頃に漂白剤と浴槽洗剤を混ぜたら白い煙が上がって楽しかったのを覚えているのですが、まさかそれじゃないですよね?
ちなみに卵の腐った匂いがしてました。

ヘタしたら死んでるやん!

ひさびさの日記がニュースへのツッコミかよ!
と思ったりもしちゃうんですが、
要はデスノートの絵をトレースした作品があったってだけの話なんですね。
ここまでは良くある話。

で、色々見てたらデスノート自体も33年前に水木しげるが書いた不思議な手帖って作品にそっくりなんですね。
http://image.blog.livedoor.jp/guideline/imgs/c/f/cf9bfb43.jpg
ワロタよ。


デスノート酷似 盗用をおわび
http://news.mixi.jp/view_news.pl?id=369331&media_id=2

twitter_logo_header.png


やってる人居たらヨロ。

http://twitter.com/CH0PPER

381557093_168.jpg

中国ではGoogleでさえ敵わなかった検索エンジントップの「百度」が日本でサービスを開始しました。

早速チェケラッチョ!

http://baidu.jp/

画像検索で「天安門」と検索。。。

うーん。。。

やっぱし当局の検閲がかかってるのねー。
何のことか分からない人は検閲のかかっていないGoogleの画像検索と比較してみよう!

このブログを書いてる人

Te2 名前 Te2
現在地 大阪
自己紹介 広告デザイナで遊ぶの大好きで食べるの大好きで運動も好きで楽器を演奏するのも好きで本を読むのも好きで写真撮るのも好き。▼出身は長崎県で第二の故郷は香川県で現在は大阪。
tumblrfollow me!flickrこのブログのRSSフィードを取得

カコログ

移行前の過去のコンテンツはこちら

月別 アーカイブ