PHPは仕様がよく変わったりするので、ハマってしまうことが多々あります。
htmlspecialcharsを使っていると起こります。
PHP5.4.0からデフォルトのエンコーディングが変更になったため、内部コードにEUC-JPやShift_JISを使用していると起こります。
第3引数にエンコーディングを指定しましょう。
× $string = htmlspecialchars($string);
○ $string = htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'EUC-JP');
原因がPHPなのかPEARなのかPostgreSQLなのか不明です。
いつの間にか取得できないようになってしまっていました。
SQL文を直接指定してやれば動作します。
× $seq = $mdb2->currID('seq');
○ $seq = $mdb2->queryOne("SELECT currval('seq')");
異なるサーバで、mbstring周りの設定は同じで、プログラムも同じなのになぜか文字化けすることがあります。
その場合は、output_buffering や output_handler も同じか確認してみましょう。
計算結果をround, ceil, floorするのはよくあると思いますが、floorすると誤差が出てしまいハマりました。
// 7 echo floor((0.1 + 0.7) * 10);
え、どうして8じゃないの?
一度文字列に変換すると期待した値になります。
// 8 echo floor(strval((0.1 + 0.7) * 10));
正攻法はBC Math 関数を使用するらしいですが、面倒です。
詳しい説明はマニュアルにあります。
https://secure.php.net/manual/ja/language.types.float.php