2012-06-28 1 views
1

에서 호출되었습니다. 내 응용 프로그램에서 db 연결을 설정했습니다. 이제 테이블을 전환하고 계속 오류가 계속 발생합니다.전환 테이블에서 zend db 오류 catch 가능 치명적인 오류 : __construct()에 전달 된 인수 1이 배열, 주어진 개체 여야합니다.

Catchable fatal error: Argument 1 passed to Application_Model_PgeSeismicFile::__construct() must be an array, object given, called in /opt/eposdatatransfer/application/models/PgeSeismicFileMapper.php on line 58 and defined in /opt/eposdatatransfer/application/models/PgeSeismicFile.php on line 10 

두 테이블에 대해 두 가지 모델이 있습니다. 두 번째 테이블에 액세스하려고하면 오류가 발생합니다. 액세스 및 첫 번째 테이블을 설정 괜찮아요 그리고 나는 그것을 같은 방식으로 않습니다. 다음은 테이블을 전환하는 방법입니다. 내 세션에서이 라인

$this->dbTable = new Application_Model_PgeSeismicFile($session->dbAdapter); 

private $_dbTable = null; 

    public function setDbTable($dbTable, $path = false) 
    { 
     $project = $_REQUEST['username']; 

     $filename = $path . "PSDB.db"; //APPLICATION_PATH . "/data/db/".$project."/PSDB.db"; 

     if (!file_exists($filename)) { 
      //$this->_redirect('/'); 
      // need to redirect and pass eror message for user 
      throw new Exception("File does not exist"); 
     } 

     try{ 
      //exit("3"); 
      $dbAdapter = Zend_Db::factory("pdo_sqlite", array("dbname"=> $filename)); 
     }catch (Zend_Db_Adapter_Exception $e) { 
      // perhaps a failed login credential, or perhaps the RDBMS is not running 
      var_dump($e); 
      exit("1"); 

     } catch (Zend_Exception $e) { 
      // perhaps factory() failed to load the specified Adapter class 
      var_dump($e); 
      exit("2"); 
     } 

     if (is_string($dbTable)) { 
      print_r($dbAdapter); 
      $dbTable = new $dbTable($dbAdapter); 
      $dbTableRowset = $dbTable->find(1); 
      $user1 = $dbTableRowset->current(); 
      //var_dump($user1); 
      //exit("hello"); 
      //$row = $user1->findDependentRowset(); 
     } 
     if (!$dbTable instanceof Zend_Db_Table_Abstract) { 
      throw new Exception('Invalid table data gateway provided'); 
     } 
     $this->_dbTable = $dbTable; 
     //$session = new Zend_Session_Namespace(); 
     //$session->dbAdapter = $this->_dbTable; 
     //var_dump($this); 
     //exit(); 
     return $this; 
    } 

    public function getDbTable($path = false) 
    { 
     if (null === $this->_dbTable) { 
      $session = new Zend_Session_Namespace(); 
      //$this->setDbTable('Application_Model_PgeSeismicFile',$path); 
      $this->dbTable = new Application_Model_PgeSeismicFile($session->dbAdapter); 
     } 
     return $this->_dbTable; 
    } 

그것은 오류가 난 저장하고 :

$dbAdapter = Zend_Db::factory("pdo_sqlite", array("dbname"=> $filename)); 
+1

어떤 부분을보십시오 당신에게하지 구체적으로 이해 하는가? – hakre

+0

어디 개체가 아닌 배열을 전달해야합니다. 처음으로 테이블에 액세스 할 때 객체를 전달하므로 두 번째로 작동하지 않는 이유는 무엇입니까? ; 내 seismicfile 모델'공공 기능 __construct (배열 $ 옵션 = NULL) \t { \t \t 경우 (는 is_array ($ 옵션)) { \t \t \t $ this-> setOptions을 ($ 옵션)되어 다음 \t \t \t} – shorif2000

+0

변수는 상수가 아니며 시간이 지남에 따라 값이 변경 될 수 있습니다. – hakre

답변

0

오류 메시지의

$dbAdapter = Zend_Db::factory("pdo_sqlite", array("dbname"=> $filename)); 

Zend_Db_Table::setDefaultAdapter($dbAdapter); 

$this->dbTable = new Application_Model_PgeSeismicFile;