有用Cakephp的朋友么?被郁闷到了。 - V2EX
yibin001
V2EX    PHP

有用Cakephp的朋友么?被郁闷到了。

  •  
  •   yibin001 Sep 6, 2012 4120 views
    This topic created in 4995 days ago, the information mentioned may be changed or developed.
    同样的一段代码,在我的pc上(xampp/php5.3.8/apache2)和虚拟机(linux/xampp/php5.3.8/apache2)上运行的结果一致,但到了服务器上(centos5.5/php5.3.16/nginx)得到的结果与本机不一致,导致后面的逻辑都错了,不知道问题在哪里:

    $user = $this->Login->find('first',array('conditions'=>array(
    'Login.username = '=>$username,
    'Login.password = '=>$password
    )));

    这是一段判断登录的逻辑,在后面的代码中是用$user['Login']来判断的,在我PC和虚拟上能取到$user['Login']的正确值,print_r出来后:
    Array ( [Login] => Array ( [id] => 9 [username] => aaaaaa [password] => 04b35cf604476680b22c4bb8b0888e4a [created] => 2012-08-03 10:13:38 [groupid] => 10 [status] => 1 [lastlogintime] => 2012-08-03 10:14:07 [lastloginip] => 192.168.12.78 [logincount] => 2 ) )

    但代码放到服务器上就行不通了,登录老进不去,print_r($user)后:
    Array ( [0] => Array ( [id] => 9 [username] => aaaaaa [password] => 04b35cf604476680b22c4bb8b0888e4a [created] => 2012-08-03 10:13:38 [groupid] => 10 [status] => 1 [lastlogintime] => 2012-08-03 10:14:07 [lastloginip] => 192.168.12.78 [logincount] => 2 ) )

    由Key为Login直接变成下标数组了,代码里的$user['Login']自然无效了。。。。

    震惊了。。。这问题出在哪?
    6 replies    1970-01-01 08:00:00 +08:00
    Semon
        1
    Semon  
       Sep 6, 2012
    session开了吗?session目录权限?
    yibin001
        2
    yibin001  
    OP
       Sep 6, 2012
    @Semon 看cakephp源代码看出了问题,因为cakephp用的是pdo,而Model类里用到了PDOStatement::getColumnMeta()方法,读取表名,最后用表名作为KEY拼成数组返回。
    很不幸,PDOStatement::getColumnMeta()只是一个实验性的方法,很有可能在某些版本被XX掉,恰好,服务器上的PDOStatement::getColumnMeta()方法无法读取表名,所以返回了下标数组。。。

    不明白为什么Cakephp与PDOStatement::getColumnMeta()这么耦合,虽然可以用下标获取数据,但官方压根没提到这一点,代码里都是用ModelName为key获取数据,这不是坑爹了么。。。

    唉。
    yibin001
        3
    yibin001  
    OP
       Sep 6, 2012
    相关源代码:
    /**
    * Builds a map of the columns contained in a result
    *
    * @param PDOStatement $results
    * @return void
    */
    public function resultSet($results) {
    $this->map = array();
    $numFields = $results->columnCount();
    $index = 0;

    while ($numFields-- > 0) {
    $column = $results->getColumnMeta($index);
    if (empty($column['native_type'])) {
    $type = ($column['len'] == 1) ? 'boolean' : 'string';
    } else {
    $type = $column['native_type'];
    }
    if (!empty($column['table']) && strpos($column['name'], $this->virtualFieldSeparator) === false) {
    $this->map[$index++] = array($column['table'], $column['name'], $type);
    } else {
    $this->map[$index++] = array(0, $column['name'], $type);
    }
    }
    }
    Semon
        4
    Semon  
       Sep 6, 2012
    还是用ZendFramework靠谱一些。
    PrideChung
        5
    PrideChung  
       Sep 6, 2012
    @Semon 貌似ZendFramework在PHP开发者之中口碑都不太好……
    Semon
        6
    Semon  
       Sep 7, 2012
    @PrideChung 仁者见仁,我用得挺好,主要是方便。
    About     Help     Advertise     Blog     API     FAQ     Solana     1019 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 22:29 PVG 06:29 LAX 15:29 JFK 18:29
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86