勝手にクオートがエスケープされてる

フォームからこんな情報渡すと

I say "Hello"
||

phpに渡って来たとき(?)に

>||
$greeting = $_GET['message'];
echo $greeting; // I say \"Hello\";

とか勝手にクオートをエスケープするためにバックスラッシュが足されてる。
何でそんなことしてんの。
ということでstripslashes()を使って妙なバックスラッシュを削除。

$greeting = stripslashes( $_GET['message'] );
echo $greeting; // I say "Hello"

stripslashes()だと自分で書いたクオートの前のバックスラッシュは削除されてなかった。
例えば以下はそのままバックスラッシュ付きで表示された。

I say \"Hello"

よし。

文字コードがデフォルトと違う場合の処理

my.cnfでデータベースの文字コード

default-character-set = ujis

となってて、utf-8のデータベースを作るとする。

create database testdb default character set utf8;

このような場合、プログラムはmy.cnfの設定しか分からない(?)のでプログラム側に文字コードutf-8であることを知らせる必要がある。
知らせ方は以下。

use names utf8;


もし日本語が入力できなかったりした場合はこの辺を疑おう。

fetchRow

以下のようには出来ない。

$res = $db->select()
          ->from('user')
          ->limit(1,0)
          ->query()
          ->fetchRow();

こう↓書くらしい。

$sql = $db->select()
          ->from('user')
          ->limit(1,0);
$res = $db->fetchRow($sql->__toString());

なんで?メソッドチェーンでそのまま繋げた方がいいんじゃないの?
もしかしてみんな素のSQL文書いてる?

$res = $db->fetchRow('select * from user limit 0,1');

まあそっちの方が好きだからいいんだけど。

ところでfetchRowの場合でも、limitかけないとテーブル全データ取得するんだろうか。
なんか怖いからlimitかけてる。

モジュールごとにErrorControllerを分ける方法が分からん

どうやるんだ。
つーかできるよね?

ErrorControllerの方で判断勝手にしようと思ったけど

if ( $this->getRequest()->getModuleName() == 'module1' ) {

}

$this->getRequest()->getModuleName()には'default'が入ってた。
まあそりゃそうなるのか。呼び出されてるのは/modules/default/controllers/ErrorController.phpやからね。


もうしょうがないからとりあえず各モジュールから自分のモジュール名をmodulenameとかセットして、それを見てErrorControllerの方で判断してる。


他に干渉しないように、というのがモジュールのコンセプトなのに良くないな、とは思いますよ。