ラベル codeigniter の投稿を表示しています。 すべての投稿を表示
ラベル codeigniter の投稿を表示しています。 すべての投稿を表示

2011/07/15

codeigniterでpostgresqlの設定 database.php

$db['test']['username'] = "username";
$db['test']['password'] = "passwd";
$db['test']['database'] = "db_name";
$db['test']['dbdriver'] = "postgre";
$db['test']['dbprefix'] = "";
$db['test']['pconnect'] = FALSE;
$db['test']['db_debug'] = TRUE;
$db['test']['cache_on'] = FALSE;
$db['test']['cachedir'] = "";
$db['test']['char_set'] = "utf8";
$db['test']['dbcollat'] = "utf8_general_ci";

pconeect 持続的接続は使用しない方がいい。
OSのプロセスが残って不安定になる。

2011/07/08

codeigniterでpostgresqlで文字化けが治らない場合の対処

またしてもcodeingiterのポスグレのバグを発見しました(通算3つ目)

・phpからpostgresにclient_encodingを送っていない

postgresqlはアプリケーション側でclient_encodingを設定していないと
設定ファイルに書いてあるデフォルトのclient_encodingに変換して結果を返してきます。

修正箇所は
system/database/drivers/postgre/postgre_driver.php

145行目 db_set_charset
中身は無しでコメントにて
// @todo - add support if needed
ふざけんなと( ゚Д゚)ヴォケ!!

pg_set_client_encoding($this->conn_id , $this->char_set);

これで文字化けが直りました。
しかし本当にcodeigniterのpostgresドライバは信用出来ない。
他にも色々バグありそう

2011/06/07

codeigniterでpostgresqlのlike検索にバグがある件

基本的にMySQL向けに作られているフレームワークだとしてもこれはさすがにひどいでしょ。。。
バグは2点みつけてます。
CIのバージョンは1.7.3です。

①点目
[RESOLVED] Undefined property: CI_DB_postgre_driver::$_like_escape_char | CodeIgniter Forums
↑のURLに書いてあるとおりただのスペルミスです。。

From
$like_statement = $like_statement.sprintf($this->_like_escape_str, $this->_like_escape_char);

To
$like_statement = $like_statement.sprintf($this->_like_escape_str, $this->_like_escape_chr);

②点目
「%(パーセント)」「_(アンダースコア)」を含むライク検索が出来ない。

/database/drivers/postgre/postgre_driver.php
299行目

$str = str_replace( array('%', '_',$this->_like_escape_chr),
array($this->_like_escape_chr.'%', $this->_like_escape_chr.'_' , $this->_like_escape_chr.$this->_like_escape_chr),
$str);

str_replaceでエスケープを行っているが配列の順番がおかしいため
エスケープ文字が2コ付くようになってしまっています。
下記のように修正

$str = str_replace( array($this->_like_escape_chr ,'%', '_'),
array($this->_like_escape_chr.$this->_like_escape_chr ,$this->_like_escape_chr.'%', $this->_like_escape_chr.'_' ),
$str);

置換前、置換後の配列の3番目の要素をそれぞれ1番目にもってくる。これでOK。
こんなすぐ分かるバグぐらい誰かフィックスしとけよと。

2011/05/28

CodeIgniterの_remap

CodeIgniterの_remapメソッドでパラメータを指定する方法
この方法でも出来そうだったけどフレームワーク部分に手を加えたくなかったのでこうしてみた


function _remap($method)
{
if ($method == 'some_method')
{
$this->$method();
}
else
{
call_user_func_array(array(&$this, $method), array_slice($this->uri->rsegments, 2));
}
}

多分大丈夫のはず