2011-11-23 53 views
0

编辑23/11:解决方案建立...我写了$ _db而不是$ this - > _ db在构造函数中!什么是NOOB!

我尝试在我的ZF应用程序中创建一个新模型。 我得到一个错误:Zend Framework - 在非对象上选择()

Fatal error: Call to a member function select() on a non-object in [...]/models/TrackingPageMapper.php on line 86

我是ZF的新用户,我想我忘记任何事情。

这里是我的类代码:

/** 
* TrackingPageMapper 
* @author Raphaël Deschler - [email protected] 
* @version 0.1 
*/ 

class Default_Model_TrackingPageMapper 
{ 
    private $_db; 

/** 
* __construct 
*/ 
public function __construct() 
{ 
    $_db = Zend_Db_Table::getDefaultAdapter(); 
} 

#-----[Public Section] 

/** 
* addView() 
* @param EtId, etablissement id 
* 
* Check : 
* 1) If this is the first click of the day for this IP on this page 
* 2) If this is the first click of the month for this IP 
* 3) Save or not 
* 
* @return void 
* 
*/ 
public function addView($EtId) 
{ 
    $today = getDate(); 
    $ip = $this->getRealIp(); 

    //Check If is the IP exists 
    $this->ipExists($ip, $EtId); 

    //print_r($today); 




} 

#-----[Private Section] 

/** 
* getRealIp() 
* @return varchar(15) 
* 
*/ 
private function getRealIp() 
{ 
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) 
    { 
     $ip = $_SERVER['HTTP_CLIENT_IP']; 
    } 
    elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) 
    { 
     $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; 
    } 
    else 
    { 
     $ip = $_SERVER['REMOTE_ADDR']; 
    } 

    return $ip; 
} 

/** 
* ipExists() 
* @param Ip address 
* @param EtId, etablissement id 
* 
* @return false if ip !exists 
* @return array of ip infos if exists 
* 
*/ 
public function ipExists($Ip, $EtId = null) 
{ 
    $myQuery = $this->_db->select() 
         ->from('tracking_ip', 'idtracking_ip') 
         ->where('ip = ?',$Ip); 

    $result = $this->_db->fetchAll($myQuery); 

    print_r($result); 
} 
} 

而且我把这种模式像:

$oTrack = new Default_Model_TrackingPageMapper; 
$oTrack->addView($Id); 

任何人都可以帮我吗?

感谢您的支持正在添加,

编辑

var_dump($_db);

object(Zend_Db_Adapter_Pdo_Mysql)#76 (12) { 
    ["_pdoType":protected]=> 
    string(5) "mysql" 
    ["_numericDataTypes":protected]=> 
    array(16) { 
    [0]=> 
    int(0) 
    [1]=> 
    int(1) 
    [2]=> 
    int(2) 
    ["INT"]=> 
    int(0) 
    ["INTEGER"]=> 
    int(0) 
    ["MEDIUMINT"]=> 
    int(0) 
    ["SMALLINT"]=> 
    int(0) 
    ["TINYINT"]=> 
    int(0) 
    ["BIGINT"]=> 
    int(1) 
    ["SERIAL"]=> 
    int(1) 
    ["DEC"]=> 
    int(2) 
    ["DECIMAL"]=> 
    int(2) 
    ["DOUBLE"]=> 
    int(2) 
    ["DOUBLE PRECISION"]=> 
    int(2) 
    ["FIXED"]=> 
    int(2) 
    ["FLOAT"]=> 
    int(2) 
    } 
    ["_defaultStmtClass":protected]=> 
    string(21) "Zend_Db_Statement_Pdo" 
    ["_config":protected]=> 
    array(7) { 
    ["username"]=> 
    string(4) "riad" 
    ["password"]=> 
    string(7) "xxxxxx" 
    ["dbname"]=> 
    string(8) "riad_dev" 
    ["charset"]=> 
    string(4) "utf8" 
    ["driver_options"]=> 
    array(1) { 
     [1002]=> 
     string(14) "SET NAMES utf8" 
    } 
    ["persistent"]=> 
    bool(false) 
    ["options"]=> 
    array(3) { 
     ["caseFolding"]=> 
     int(0) 
     ["autoQuoteIdentifiers"]=> 
     bool(true) 
     ["fetchMode"]=> 
     int(2) 
    } 
    } 
    ["_fetchMode":protected]=> 
    int(2) 
    ["_profiler":protected]=> 
    object(Zend_Db_Profiler)#74 (4) { 
    ["_queryProfiles":protected]=> 
    array(0) { 
    } 
    ["_enabled":protected]=> 
    bool(false) 
    ["_filterElapsedSecs":protected]=> 
    NULL 
    ["_filterTypes":protected]=> 
    NULL 
    } 
    ["_defaultProfilerClass":protected]=> 
    string(16) "Zend_Db_Profiler" 
    ["_connection":protected]=> 
    NULL 
    ["_caseFolding":protected]=> 
    int(0) 
    ["_autoQuoteIdentifiers":protected]=> 
    bool(true) 
    ["_allowSerialization":protected]=> 
    bool(true) 
    ["_autoReconnectOnUnserialize":protected]=> 
    bool(false) 
    } 
+0

我不明白为什么构造不应该公开。这并不能解决问题。无论如何谢谢 –

+0

无论如何做一个var_dump($ this - > _ db);在你使用select之前,看看你得到了什么。 –

+0

已经做到了。 _db工作。我编辑我的答案写转储 –

回答

0

发现的解决方案。我在构造函数中写道:$_db代替$this->_db