4
class Registration_model extends CI_Model {

    function __construct() {
        parent::__construct();
    }   

    function check_email_availability($email)
    {
        $sql = "CALL proc_1301('$email');"; 
        $query = $this->db->query($sql) or die(mysql_error()); 
        return $query->row_array();
    }

    function check_username_availability($username)
    {
        $sqlt = "CALL proc_1303('$username');"; 
        $query = $this->db->query($sqlt) or die(mysql_error()); 
        return $query->row_array();
    }

    function process_registration($username, $email, $password)
    { 
        $sql = "CALL `proc_1302`('$username', '$email', '$password');"; 
        $query = $this->db->query($sql) or die(mysql_error()); 
        return $query->result_array();   
    }

これは、モデルから 3 つの関数を 1 つずつ呼び出すコントローラー コードです。

$emailCheckRes = $this->Registration_model->check_email_availability($email); 
$usernameCheckRes = $this->Registration_model->check_username_availability($username); 
$this->data['regRes'] = $this->Registration_model->process_registration($username, $email, $password);

私の問題は、関数を 1 つだけ実行すると正常に実行されますが、そのうちの 2 つまたは 3 つすべてを実行すると空白のページが表示されることです。

解決

最後に、私自身の問題に対して得た唯一の解決策は次のとおりです。

/* ADD THIS FUNCTION IN SYSTEM/DATABASE/DB_ACTIVE_REC */
/* USAGE $this->db->freeDBResource($this->db->conn_id); */
function freeDBResource($dbh){
    while(mysqli_next_result($dbh)){
            if($l_result = mysqli_store_result($dbh)){
              mysqli_free_result($l_result);
            }
        }
}
4

2 に答える 2

6

この問題は、CodeIgniterのアクティブなrecorsと複数のデータベースのストアドプロシージャの呼び出しに関連しています。

まず、dbdriverパラメーター(application / config / database.php)がmysqliに設定されていることを確認します。次に、StackOverflowの「CodeIgniterのActive Recordクラスからのストアドプロシージャの呼び出し」の質問で説明されているように、 system / database/DB_active_rec.phpに次の関数を追加します。

function freeDBResource($dbh){
    while(mysqli_next_result($dbh)){
            if($l_result = mysqli_store_result($dbh)){
              mysqli_free_result($l_result);
            }
        }
}

..そしてあなたのコントローラーで使用する:

$this->db->freeDBResource($this->db->conn_id);

ストアドプロシージャの呼び出し後。

于 2012-07-30T17:50:33.130 に答える
0

モデルとコントローラは問題ないようです。次のようなモデルを試す場合:

class Test_model extends CI_Model
{
   function __construct()
   {
      parent::__construct();
   }
   function a($a_input)
   {
      return($a_input.': a');
   }
   function b($b_input)
   {
     return($b_input.': b');
   }
}

...そして、次のようにコントローラーから関数を呼び出します。

$this->load->model('Test_model');
    $a_result = $this->Test_model->a('aaa');
    $b_result = $this->Test_model->b('bbb');
    echo($a_result.'<br />'.$b_result);

複数の関数呼び出しが正常に機能していることがわかります。

1 つだけ呼び出した場合、モデル内の 3 つの関数のいずれかを正しく実行できると確信していますか? はいの場合、ストアド プロシージャに問題がある可能性があります...モデル関数で、ストアド プロシージャの代わりに通常のクエリを実行してみてください。問題をデバッグするには、/application/config/database.php で db_debug が TRUE に設定されているかどうかも確認してください。

于 2012-07-30T12:32:48.187 に答える