PHPのクエリパラメーターの扱い方について

php

3年ぶりの更新というわけで、まさしく3年寝太郎状態なわけですが。今日は今巷を賑わせているJSON SQL Injectionについてです。 DeNA Engineers' Blog [ Technology of DeNA ] JSON SQL Injection、PHPならJSONなしでもできるよ | 徳丸浩の日記 徳丸さんの記…

MDB2で複数のDB接続を行う場合の恐ろしい罠

php

MDB2を使って複数のDB接続したいなんてことあるよね。ところがどっこい、実際にコードを書いてみると恐ろしいことが起きた。それは二つ目のDB接続をすると一つ目のDB接続が二つ目のDB接続に乗っ取られてしまうという! query('SELECT COUNT(*) FROM hoge_tbl…

クラス内で定義した定数の一覧を得る方法

php

Text::ASCIITableによるアスキーテーブルレイアウト

MySQLの出力結果みたいなのが必要になったのでCPAN漁ってたらこんなの発見。Text::ASCIITable - Create a nice formatted table using ASCII characters. - metacpan.org地味に凄いめちゃ便利 use Text::ASCIITable; my @rows = ( [1,'foo','2011-03-16 11:2…

PHP5.2とPHP5.3でArrayObjectの挙動が違う話

php

ハマッタのでメモ。 1)); print_r($a); これをPHP5.2とPHP5.3で実行すると以下のようになる # PHP5.2 ArrayObject Object ( [test] => 1 ) # PHP5.3 ArrayObject Object ( [storage:ArrayObject:private] => Array ( [test] => 1 ) )PHP5.3の場合、なにやら…

「Webを支える技術」読了

久しぶりに本を読みませうと神の意思が降りてきたので第一弾は「Webを支える技術」を読むことに。 Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)作者: 山本陽平出版社/メーカー: 技術評論社発売日: 2010/04/08メディア: 単行本(ソフト…

Class::Accessor::Fastが破壊的だったと初めて知ったあの日

事の発端はぽけーっとはてブのお気に入りを見ていたらClass::Accessor::Liteの記事が目に付いた事でした。お、新しいモジュールか?と思いさっそく実装を拝見させてもらったわけです。なるほどなるほど、超が付くほどの超シンプル。超々シンプル。実際問題Cl…

sprintfで使用する引数を直指定する方法

久々にPerl。いや、ほんと久しぶりよね。 printf '%d年%d月%d日', 2010, 12, 22; # 2010年12月22日 上記のような処理の時に、引数の数は変更せずに年を削って「12月22日」と表示したい場合、以下のようにすれば可能。 printf '%2$d月%3$d日', 2010, 12, 22; …

Smartyのテンプレートで配列や連想配列を定義する方法

php

Smartyのテンプレートでは配列や連想配列を定義できない。そんな風に考えていた時期が俺にもありました。さてググってみるとプラグインを利用する方法を発見しました。 Smartyで配列を定義するプラグイン - Lism.in * blog - nekoya (id:studio-m) Smarty の…

PHPでスクリプト実行ファイルのディレクトリを得る方法

php

PHPのDateTimeクラス

php

PHPのDateTimeクラスは標準装備なのでお手軽で便利なのだけど、若干使い勝手が悪い。なのでDateTimeを継承してちょっとした拡張をしとくと便利かと。 format('Y'); } function month () { return $this->format('n'); } function day () { return $this->for…

PHPでPath_Classを使ってらくらくディレクトリorファイル操作

php

先日の記事だけを見ると、Perlを使ったこと無い人からすれば何がどう便利なのか良く分からないと思うのでここらでPath_Classの解説。まずPath_Classの大きな特徴として、引数で与えたパスが、実際にファイルとして存在してなくても良いというところがあげら…

PHP版Path::Class

php

え?あぁ。Perlerなら皆さんご存知のPath::Classですが、それのPHP版です。欲しかったので作りました。以下使い方例。

ArrayObjectと多次元配列とisset

PHP

ArrayObjectを如何にして有効活用するか

PHP

100); } // foo()['aaa']; // Parse error ao(foo())->aaa; というのを思いついた。あ、そうだ、あけましておめでとうございます。

PHPのhtmltemplate.incでオブジェクトやらフィルターやら

php

ひょんなことからhtmltemplate.incというHTMLテンプレートエンジンを触ることになった。どんな感じのテンプレートなのかは http://hokori.net/2008/03/01/thmltemplate_for_php/ http://d.hatena.ne.jp/atyks/20090830/1251641112 あたりで詳しく書かれてい…

ArrayObjectは便利だけと扱いづらいね

PHP

配列のように振舞えるArrayObjectなんだけど、あくまでもオブジェクトなので結局のところ配列を期待する標準関数との相性が悪すぎて微妙。is_arrayは偽になっちゃうし、array_shiftはうまく動かないし。array_flipとかarray_uniqueとかには一応渡せるけど戻…

List::MoreUtilsのuniq関数の実装が変わってた件

大分昔に書いたHashを使って配列をユニークにしようという記事のブコメにてList::MoreUtilsのuniq関数の実装が変わったというコメントを頂きました。 List::MoreUtils 0.25_02 では少々変更されていた。 http://cpansearch.perl.org/src/VPARSEVAL/List-More…

配列か連想配列かを判別する

php

PHPにおいて、ある配列が連想配列として使われているのかどうかを判別したい場合どうすればいいのか。色々調べてたらこんな記事を発見しました。

ArrayObjectによる配列演算子のオーバーロード風

PHP

PHP5やり始めたばっかでまだ右も左もわからずに右往左往してます。色々調べてたら、PHP5になってSPL(Standard PHP Library)ってのが導入されたということを知った。へー。そのSPLの中にArrayObjectという物がありまして、オブジェクトを配列っぽく扱えるよう…

PHPでnewと同時にメソッドチェーンする方法

PHP

最近ようやくPHP5をちょこちょこと触ってるわけなんですが、折角メソッドチェーンサポートされたのに何故かnewと同時にできない罠。これなんか動いても良さそうなのになぁ。直感的だし。 bar(); 嘆いてもしょうがない。動かないものは動かないので、ちょこち…

Smartyでオブジェクトのメソッドチェーンっぽいのを実現する

PHP

Smartyってオブジェクトのメソッドチェーンサポートしてないんだね。 -- foo.tpl -- { $foo->setdata(88)->setdata('a','b')->getdata() }Fatal error: Smarty error: [in foo.tpl line 2]: syntax error: unrecognized tag: $foo->setdata(88)->setdata('a'…

PHP初心者でも簡単にPerlに移行するための妙妙案

PHPが何で扱いやすいかわかったよ!PHPタグに真理があったんだよ! <html> <body> 僕の名前はです。 年齢は歳です。 </body> </html> これだけで動くんだもんそりゃ便利だし分かりやすいよ。なのでPerlでもPHPタグ使えるようにしてみました。 package PHP::Block; use strict; use war…

PHPの閉じタグは心の臓に悪いから使わないで

PHP

閉じタグってのは「?>」のことね。未だに閉じタグ使ってるコードを見ると一瞬ドキッとするんだよね。(自分の昔のコードも含むw)いや、ちゃんとわかってて確実に使いこなしてるならいいんだけどたまに -- ここがファイルの先頭 -- -- ここがファイルの後尾 …

MySQLで等しくないを表す比較演算子はやっぱ<>だよね!

PHP

MySQLで等しくないを表す比較演算子 - Unknown::Programmingさて昨日の記事で「!=」使えお!言ったのは訂正させていただきます。やっぱ時代は「<>」だよね。 ・・・所変わって今日はPHPの話でもしようかな。とある環境でPEAR::DBを使っておるのですがこんな…

MySQLで等しくないを表す比較演算子

メモ。今日見たコードにこんな物が SELECT hoge FROM foo WHERE bar <> 0; ___ ━┓ / ―\ ┏┛ /ノ (●)\ ・ . | (●) ⌒)\ . | (__ノ ̄ | \ / \ _ノ /´ `\ | | | | なんだ「<>」って。 MySQL :: MySQL 5.6 リファレンスマニュアル :: 12.3.2 比較関…

ちょっとしたコードを検証するコツ

とりあえずPerl限定のお話で。まぁ皆同じようなことは多分してると思うのでぐだぐだと何か言うことも無いんだけど、自分流のやり方を覚書程度にメモするという意味でここに残しておきます。まず以下のようなfoo.plを用意します。 #!/usr/local/bin/perl -w u…

今日見た嫌なコード

※変数名とかは何か違ったり違わなかったりします

PHP「"0x0A" == "10"はTRUEですがよろしいですか」

PHP

ぼく「えっ」 PHP「"0x0A" == "10"はTRUEになりますが」 ぼく「いえFALSEです」 PHP「えっ」 ぼく「えっ」 PHP「まだ比較したことがないということでしょうか」 ぼく「えっ」 PHP「えっ」 ぼく「変化するってことですか」 PHP「なにがですか」 ぼく「型が」 …

C::P::Session::State::URI×HTML::Entitiesで文字化け

とりあえずググルと以下のような記事が。 しかし、それもコードが冗長になるので、以下の方法で対応しました。MyApp.pm %HTML::Entities::char2entity = ( '&' => '&amp;' , # ampersand '>' => '&gt;' , # greater than '<' => '&lt;' , # less than '"' =>…