2012-03-30 47 views
0

如果我使用PDO和使用FETCH_INTO映射MySQL的列名變量名

... 
$query->setFetchMode(PDO::FETCH_INTO, $this); 
$query->execute(); 

我有一個小問題。 PHP變量是camelCase,但MySQL列名是,下劃線爲。所以我有creationDate vs creation_date

我應該重命名方程的一邊來匹配另一邊還是通過__set魔術方法(使用開關命令)做一些1:1「映射」?

回答

2

看看symfony中的sfInflector類它做同樣的工作(在camelize法):

http://trac.symfony-project.org/browser/branches/1.4/lib/util/sfInflector.class.php

這裏的抽出代碼:

$tmp = $lower_case_and_underscored_word; 
$tmp = sfToolkit::pregtr($tmp, array('#/(.?)#e' => "'::'.strtoupper('\\1')", 
            '/(^|_|-)+(.)/e' => "strtoupper('\\2')")); 

而且從sfToolkit代碼:

public static function pregtr($search, $replacePairs) 
{ 
    return preg_replace(array_keys($replacePairs), array_values($replacePairs), $search); 
}