2010-10-23 48 views
0

我剛剛在Windows 7框,IIS 7,快速CGI,沒有模塊設置一個簡單的PHP代碼點燃器項目。代碼點火器加載數據庫似乎停止進程線程

當我通過做這樣的this->load->database()加載數據庫在Model類的函數之一時,線程似乎停止在該特定行上。以後的操作都沒有完成。

class Account_model extends Model { 

    var $userId = ''; 
    var $userName = ''; 
    var $requestToken = ''; 
    var $accessToken = ''; 
    var $enabled = false; 
    var $startOfDay; 
    var $endOfDay; 

    function Account_model() { 
     parent::Model(); 
    } 

    function get($userId) { 
     $this->load->database(); 
     $query = $this->db->get_where('accounts', array('userId' => $userId), 1, 0); 
     return $query->result(); 
    } 

    function insert() { 
     $this->load->database(); 
     // ** stop ** 
     $this->db->insert('accounts', $this); //never gets to this 
    } 
} 

如果我只是ommit該行完全,我得到了模型中的PHP異常不確定的變量$分貝。

主叫控制器:

class SignUp extends Controller { 

    function SignUp() { 
     parent::Controller(); 
    } 

    function createUser() { 
     echo 'processing'; 

     $this->load->model('Account_model'); 

     $this->Account_model->userId = 'asd'; 
     $this->Account_model->userName = 'test_user_pls_delete'; 
     $this->Account_model->enabled = true; 
     $this->Account_model->startOfDay = time(); 
     $this->Account_model->insert(); 

     echo 'done'; // never gets to this 
    } 
} 

我已經驗證數據庫配置是正確的(主機名,驅動程序等),並且能夠從使用MySQL workbrench本機連接到數據庫服務器。

$active_group = "default"; 
$active_record = TRUE; 

$db['default']['hostname'] = "{omitted}"; 
$db['default']['username'] = "{omitted}"; 
$db['default']['password'] = "{omitted}"; 
$db['default']['database'] = "{omitted}"; 
$db['default']['dbdriver'] = "mysql"; 
$db['default']['dbprefix'] = ""; 
$db['default']['pconnect'] = TRUE; 
$db['default']['db_debug'] = TRUE; 
$db['default']['cache_on'] = FALSE; 
$db['default']['cachedir'] = ""; 
$db['default']['char_set'] = "utf8"; 
$db['default']['dbcollat'] = "utf8_general_ci"; 

數據庫表名:佔

  • ID INT(11)主鍵的auto_increment
  • 用戶ID VARCHAR(255)utf8_general_ci
  • userName的VARCHAR(255)utf8_general_ci
  • requestToken VARCHAR (255)utf8_general_ci
  • AccessToken varchar(255)utf8_general_ci
  • 啓用TINYINT(1)
  • startOfDay時間
  • endOfDay時間

關於如何解決此問題的任何想法?

+0

介意發佈你的database.php? – Orbit 2010-10-23 17:37:13

+0

當您不發佈代碼時無法提供幫助。我們需要查看拋出此錯誤的代碼,錯誤本身以及可能的db配置設置。 – treeface 2010-10-23 19:38:58

+0

感謝球員,在線添加 – ronaldwidha 2010-10-24 13:23:19

回答

1

嗯......這裏是我的模型..

class Account_model extends Model { 

function Account_model() { 
    // Call the Model constructor 
    parent::Model(); 
    $this->db = $this->load->database('default', TRUE); 
} 

function showTables() { 
    $query = "show tables"; 
    $rs = $this->db->query($query); 
    return $rs->result_array(); 
} 

負荷$ DB數據庫,所以$分貝就可以處理查詢。

0

您可以自動加載數據庫庫,加入「數據庫」在autoload.php文件庫陣列,位於:

application/config/autoload.php 

或者加載它的ad-hoc。在這兩種情況下,它將使我們的配置,位於:

application/config/database.php 

您可以驗證您的配置是否如上?

1
  1. 您需要加載數據庫在模型或在自動配置(見Anzeo的帖子)
  2. 無法訪問模式類似$這個 - > Account_model->用戶id =「ASD」; - 需要調用函數
  3. 您不能插入$此(也不安全)
  4. 更改激活場分貝類型布爾(TINYINT是不必要的)

下應該得到你的開始......
控制器:

class SignUp extends Controller { 
    function SignUp(){ 
     parent::Controller(); 
    } 
    function createUser(){ 
     echo 'processing'; 
     $this->load->model('Account_model'); 
     $result = $this->Account_model->insert($userId = 'asd', $userName = 'test_user', $enabled = 'true', $startOfDay = time()); 
     echo ($result == TRUE) ? 'insert successful' : 'insert failed'; 
    } 
} 

模型:

class Account_model extends Model { 
    function Account_model(){ 
     parent::Model(); 
     $this->db = $this->load->database('default', TRUE); 
    } 
    function add_user($userId, $userName, $requestToken = '', $accessToken = '', $enabled = 'false', $startOfDay = '', $endOfDay = '') { 
     $user = array(
      'UserId' => $userId, 
      'UserName' => $userName, 
      'requestToken' => $requestToken, 
      'accessToken' => $accessToken, 
      'Enabled' => $enabled, 
      'startOfDay' => $startOfDay, 
      'endOfDay' => $endOfDay 
     ); 
     $this->db->insert('accounts', $user); 
     return ($this->db->affected_rows() > 0) ? TRUE : FALSE; 
     } 
    } 
} 
+0

感謝米切爾,如上所述,我的問題實際上是一個Web服務器配置,尚未解決。感謝您的解釋,但我發現它非常有幫助。從你的實現中關心我的一件事是你將模型用作一個數據訪問對象,就像'域'模型一樣。 – ronaldwidha 2010-10-25 17:33:54

+0

感謝您的投票。很多人在我用上面展示的方式(我的公司有一種標準化的方式)上使用CI中的數組而不是傳遞對象,但是對於他們自己的:D – 2010-10-25 23:03:28