2013-11-01 57 views
0

我使用CodeIgniter發展,一段時間後我發現所有的查詢正在執行兩次爲MySQL日誌波紋管顯示:笨的複製SQL查詢

  55 Query SELECT user_display FROM user WHERE user_id=1 
     55 Query SELECT user_display FROM user WHERE user_id=1 
     55 Query SELECT TIMEDIFF(NOW(),contest_create) FROM contest WHERE contest_id=95 
     55 Query SELECT TIMEDIFF(NOW(),contest_create) FROM contest WHERE contest_id=95 
     55 Query SELECT TIMEDIFF(ADDDATE(contest_create, INTERVAL contest_duration DAY),NOW()) FROM contest WHERE contest_id=95 
     55 Query SELECT TIMEDIFF(ADDDATE(contest_create, INTERVAL contest_duration DAY),NOW()) FROM contest WHERE contest_id=95 
     55 Query SELECT add_addon_id FROM addon_contest WHERE add_contest_id=95 
     55 Query SELECT add_addon_id FROM addon_contest WHERE add_contest_id=95 
     55 Query SELECT addon_name FROM addon WHERE addon_id='1' OR addon_id='4' 
     55 Query SELECT addon_name FROM addon WHERE addon_id='1' OR addon_id='4' 
     55 Query SELECT required_skill_id FROM skill_contest WHERE required_contest_id=95 
     55 Query SELECT required_skill_id FROM skill_contest WHERE required_contest_id=95 
     55 Query SELECT skill_name FROM skill WHERE skill_id='2' OR skill_id='4' OR skill_id='13' 
     55 Query SELECT skill_name FROM skill WHERE skill_id='2' OR skill_id='4' OR skill_id='13' 
     55 Query SELECT user_display FROM user WHERE user_id=2 
     55 Query SELECT user_display FROM user WHERE user_id=2 
     55 Query SELECT TIMEDIFF(NOW(),contest_create) FROM contest WHERE contest_id=9 
     55 Query SELECT TIMEDIFF(NOW(),contest_create) FROM contest WHERE contest_id=9 
     55 Query SELECT TIMEDIFF(ADDDATE(contest_create, INTERVAL contest_duration DAY),NOW()) FROM contest WHERE contest_id=9 
     55 Query SELECT TIMEDIFF(ADDDATE(contest_create, INTERVAL contest_duration DAY),NOW()) FROM contest WHERE contest_id=9 
     55 Query SELECT add_addon_id FROM addon_contest WHERE add_contest_id=9 
     55 Query SELECT add_addon_id FROM addon_contest WHERE add_contest_id=9 
     55 Query SELECT addon_name FROM addon WHERE addon_id='1' 
     55 Query SELECT addon_name FROM addon WHERE addon_id='1' 
     55 Query SELECT required_skill_id FROM skill_contest WHERE required_contest_id=9 
     55 Query SELECT required_skill_id FROM skill_contest WHERE required_contest_id=9 
     55 Query SELECT skill_name FROM skill WHERE skill_id='1' OR skill_id='4' 
     55 Query SELECT skill_name FROM skill WHERE skill_id='1' OR skill_id='4' 
     55 Query SELECT user_display FROM user WHERE user_id=2 
     55 Query SELECT user_display FROM user WHERE user_id=2 
     55 Query SELECT TIMEDIFF(NOW(),contest_create) FROM contest WHERE contest_id=16 
     55 Query SELECT TIMEDIFF(NOW(),contest_create) FROM contest WHERE contest_id=16 
     55 Query SELECT TIMEDIFF(ADDDATE(contest_create, INTERVAL contest_duration DAY),NOW()) FROM contest WHERE contest_id=16 
     55 Query SELECT TIMEDIFF(ADDDATE(contest_create, INTERVAL contest_duration DAY),NOW()) FROM contest WHERE contest_id=16 
     55 Query SELECT add_addon_id FROM addon_contest WHERE add_contest_id=16 
     55 Query SELECT add_addon_id FROM addon_contest WHERE add_contest_id=16 
     55 Query SELECT addon_name FROM addon WHERE addon_id='2' OR addon_id='4' 
     55 Query SELECT addon_name FROM addon WHERE addon_id='2' OR addon_id='4' 
     55 Query SELECT required_skill_id FROM skill_contest WHERE required_contest_id=16 
     55 Query SELECT required_skill_id FROM skill_contest WHERE required_contest_id=16 
     55 Query SELECT skill_name FROM skill WHERE skill_id='16' 
     55 Query SELECT skill_name FROM skill WHERE skill_id='16' 
     55 Query SELECT user_display FROM user WHERE user_id=1 
     55 Query SELECT user_display FROM user WHERE user_id=1 
     55 Query SELECT TIMEDIFF(NOW(),contest_create) FROM contest WHERE contest_id=68 
     55 Query SELECT TIMEDIFF(NOW(),contest_create) FROM contest WHERE contest_id=68 
     55 Query SELECT TIMEDIFF(ADDDATE(contest_create, INTERVAL contest_duration DAY),NOW()) FROM contest WHERE contest_id=68 
     55 Query SELECT TIMEDIFF(ADDDATE(contest_create, INTERVAL contest_duration DAY),NOW()) FROM contest WHERE contest_id=68 
     55 Query SELECT add_addon_id FROM addon_contest WHERE add_contest_id=68 
     55 Query SELECT add_addon_id FROM addon_contest WHERE add_contest_id=68 
     55 Query SELECT addon_name FROM addon WHERE addon_id='7' 
     55 Query SELECT addon_name FROM addon WHERE addon_id='7' 
     55 Query SELECT required_skill_id FROM skill_contest WHERE required_contest_id=68 
     55 Query SELECT required_skill_id FROM skill_contest WHERE required_contest_id=68 
     55 Query SELECT skill_name FROM skill WHERE skill_id='1' OR skill_id='3' 
     55 Query SELECT skill_name FROM skill WHERE skill_id='1' OR skill_id='3' 
     55 Query SELECT user_display FROM user WHERE user_id=1 
     55 Query SELECT user_display FROM user WHERE user_id=1 
     55 Query SELECT TIMEDIFF(NOW(),contest_create) FROM contest WHERE contest_id=79 
     55 Query SELECT TIMEDIFF(NOW(),contest_create) FROM contest WHERE contest_id=79 
     55 Query SELECT TIMEDIFF(ADDDATE(contest_create, INTERVAL contest_duration DAY),NOW()) FROM contest WHERE contest_id=79 
     55 Query SELECT TIMEDIFF(ADDDATE(contest_create, INTERVAL contest_duration DAY),NOW()) FROM contest WHERE contest_id=79 
     55 Query SELECT add_addon_id FROM addon_contest WHERE add_contest_id=79 
     55 Query SELECT add_addon_id FROM addon_contest WHERE add_contest_id=79 
     55 Query SELECT addon_name FROM addon WHERE addon_id='4' 
     55 Query SELECT addon_name FROM addon WHERE addon_id='4' 
     55 Query SELECT required_skill_id FROM skill_contest WHERE required_contest_id=79 
     55 Query SELECT required_skill_id FROM skill_contest WHERE required_contest_id=79 
     55 Query SELECT skill_name FROM skill WHERE skill_id='2' OR skill_id='4' OR skill_id='6' 
     55 Query SELECT skill_name FROM skill WHERE skill_id='2' OR skill_id='4' OR skill_id='6' 
     55 Query SELECT user_display FROM user WHERE user_id=1 
     55 Query SELECT user_display FROM user WHERE user_id=1 
     55 Query SELECT TIMEDIFF(NOW(),contest_create) FROM contest WHERE contest_id=86 
     55 Query SELECT TIMEDIFF(NOW(),contest_create) FROM contest WHERE contest_id=86 
     55 Query SELECT TIMEDIFF(ADDDATE(contest_create, INTERVAL contest_duration DAY),NOW()) FROM contest WHERE contest_id=86 
     55 Query SELECT TIMEDIFF(ADDDATE(contest_create, INTERVAL contest_duration DAY),NOW()) FROM contest WHERE contest_id=86 
     55 Query SELECT add_addon_id FROM addon_contest WHERE add_contest_id=86 
     55 Query SELECT add_addon_id FROM addon_contest WHERE add_contest_id=86 
     55 Query SELECT addon_name FROM addon WHERE addon_id='2' OR addon_id='3' 
     55 Query SELECT addon_name FROM addon WHERE addon_id='2' OR addon_id='3' 
     55 Query SELECT required_skill_id FROM skill_contest WHERE required_contest_id=86 
     55 Query SELECT required_skill_id FROM skill_contest WHERE required_contest_id=86 
     55 Query SELECT skill_name FROM skill WHERE skill_id='8' OR skill_id='13' 
     55 Query SELECT skill_name FROM skill WHERE skill_id='8' OR skill_id='13' 
     55 Query SELECT user_display FROM user WHERE user_id=1 
     55 Query SELECT user_display FROM user WHERE user_id=1 
     55 Query SELECT TIMEDIFF(NOW(),contest_create) FROM contest WHERE contest_id=92 
     55 Query SELECT TIMEDIFF(NOW(),contest_create) FROM contest WHERE contest_id=92 
     55 Query SELECT TIMEDIFF(ADDDATE(contest_create, INTERVAL contest_duration DAY),NOW()) FROM contest WHERE contest_id=92 
     55 Query SELECT TIMEDIFF(ADDDATE(contest_create, INTERVAL contest_duration DAY),NOW()) FROM contest WHERE contest_id=92 
     55 Query SELECT add_addon_id FROM addon_contest WHERE add_contest_id=92 
     55 Query SELECT add_addon_id FROM addon_contest WHERE add_contest_id=92 
     55 Query SELECT addon_name FROM addon WHERE addon_id='3' OR addon_id='4' OR addon_id='5' OR addon_id='8' 
     55 Query SELECT addon_name FROM addon WHERE addon_id='3' OR addon_id='4' OR addon_id='5' OR addon_id='8' 
     55 Query SELECT required_skill_id FROM skill_contest WHERE required_contest_id=92 
     55 Query SELECT required_skill_id FROM skill_contest WHERE required_contest_id=92 
     55 Query SELECT skill_name FROM skill WHERE skill_id='3' OR skill_id='6' OR skill_id='19' 
     55 Query SELECT skill_name FROM skill WHERE skill_id='3' OR skill_id='6' OR skill_id='19' 
     55 Query SELECT user_display FROM user WHERE user_id=2 
     55 Query SELECT user_display FROM user WHERE user_id=2 
     55 Query SELECT TIMEDIFF(NOW(),contest_create) FROM contest WHERE contest_id=12 
     55 Query SELECT TIMEDIFF(NOW(),contest_create) FROM contest WHERE contest_id=12 
     55 Query SELECT TIMEDIFF(ADDDATE(contest_create, INTERVAL contest_duration DAY),NOW()) FROM contest WHERE contest_id=12 
     55 Query SELECT TIMEDIFF(ADDDATE(contest_create, INTERVAL contest_duration DAY),NOW()) FROM contest WHERE contest_id=12 
     55 Query SELECT add_addon_id FROM addon_contest WHERE add_contest_id=12 
     55 Query SELECT add_addon_id FROM addon_contest WHERE add_contest_id=12 
     55 Query SELECT addon_name FROM addon WHERE addon_id='3' OR addon_id='4' OR addon_id='8' 
     55 Query SELECT addon_name FROM addon WHERE addon_id='3' OR addon_id='4' OR addon_id='8' 
     55 Query SELECT required_skill_id FROM skill_contest WHERE required_contest_id=12 
     55 Query SELECT required_skill_id FROM skill_contest WHERE required_contest_id=12 
     55 Query SELECT skill_name FROM skill WHERE skill_id='11' 
     55 Query SELECT skill_name FROM skill WHERE skill_id='11' 
     55 Query SELECT user_display FROM user WHERE user_id=1 
     55 Query SELECT user_display FROM user WHERE user_id=1 
     55 Query SELECT TIMEDIFF(NOW(),contest_create) FROM contest WHERE contest_id=34 
     55 Query SELECT TIMEDIFF(NOW(),contest_create) FROM contest WHERE contest_id=34 
     55 Query SELECT TIMEDIFF(ADDDATE(contest_create, INTERVAL contest_duration DAY),NOW()) FROM contest WHERE contest_id=34 
     55 Query SELECT TIMEDIFF(ADDDATE(contest_create, INTERVAL contest_duration DAY),NOW()) FROM contest WHERE contest_id=34 
     55 Query SELECT add_addon_id FROM addon_contest WHERE add_contest_id=34 
     55 Query SELECT add_addon_id FROM addon_contest WHERE add_contest_id=34 
     55 Query SELECT add_addon_id FROM addon_contest WHERE add_contest_id=34 
     55 Query SELECT required_skill_id FROM skill_contest WHERE required_contest_id=34 
     55 Query SELECT required_skill_id FROM skill_contest WHERE required_contest_id=34 
     55 Query SELECT skill_name FROM skill WHERE skill_id='3' 
     55 Query SELECT skill_name FROM skill WHERE skill_id='3' 
     55 Query SELECT user_display FROM user WHERE user_id=1 
     55 Query SELECT user_display FROM user WHERE user_id=1 
     55 Query SELECT TIMEDIFF(NOW(),contest_create) FROM contest WHERE contest_id=74 
     55 Query SELECT TIMEDIFF(NOW(),contest_create) FROM contest WHERE contest_id=74 
     55 Query SELECT TIMEDIFF(ADDDATE(contest_create, INTERVAL contest_duration DAY),NOW()) FROM contest WHERE contest_id=74 
     55 Query SELECT TIMEDIFF(ADDDATE(contest_create, INTERVAL contest_duration DAY),NOW()) FROM contest WHERE contest_id=74 
     55 Query SELECT add_addon_id FROM addon_contest WHERE add_contest_id=74 
     55 Query SELECT add_addon_id FROM addon_contest WHERE add_contest_id=74 
     55 Query SELECT addon_name FROM addon WHERE addon_id='1' 
     55 Query SELECT addon_name FROM addon WHERE addon_id='1' 
     55 Query SELECT required_skill_id FROM skill_contest WHERE required_contest_id=74 
     55 Query SELECT required_skill_id FROM skill_contest WHERE required_contest_id=74 
     55 Query SELECT skill_name FROM skill WHERE skill_id='2' 
     55 Query SELECT skill_name FROM skill WHERE skill_id='2' 
     55 Query SELECT skill_name FROM skill WHERE skill_status=2 
     55 Query SELECT skill_name FROM skill WHERE skill_status=2 
     55 Quit 

當一些INSERT查詢的問題運行,然後所有信息被插入兩次,並且查看查詢的順序,我可以得出結論,我沒有兩次調用模型,但是當我調用「$ this-> db-> query($ sql)」時,這是被髮送給mySQL兩次。 也許我在CodeIgniter中有一些錯誤的數據庫配置,有沒有人知道發生了什麼?

+0

您是否嘗試過使用模型的獨立調用,該模型會生成虛擬查詢,以檢查是否調用了兩次。如果不是,錯誤在代碼中的某處,循環或其他什麼使得雙重呼叫 –

+0

其實我沒有嘗試過模型,但如果在代碼中有一些額外的調用日誌應該是不同的。例如,我有一個函數,先選擇,然後在INSERT之後,如果這個函數被調用兩次,日誌應該是「SELECT INSERT SELECT INSERT」,但是日誌顯示「SELECT SELECT INSERT INSERT」。 –

+0

你可以發表一個被稱爲兩次的模型方法的例子嗎? – Jeemusu

回答

0

嗯,我發現codeigniter系統裏的CI_DB_pdo_driver中的_execute()函數工作不正常,也許是因爲php版本。

function _execute($sql) 
{ 
    $sql = $this->_prep_query($sql); 
    $result_id = $this->conn_id->prepare($sql); 
    $result_id->execute(); 

    if (is_object($result_id)) 
    { 
     if (is_numeric(stripos($sql, 'SELECT'))) 
     { 
      $this->affect_rows = count($result_id->fetchAll()); 
      $result_id->execute(); 
     } 
     else 
     { 
      $this->affect_rows = $result_id->rowCount(); 
     } 
    } 
    else 
    { 
     $this->affect_rows = 0; 
    } 

    return $result_id; 
} 

TO:反正我從改變笨的代碼

function _execute($sql) 
{ 
    $sql = $this->_prep_query($sql); 
    $result_id = $this->conn_id->prepare($sql); 
    $result_id->execute(); 

    if (is_object($result_id)) 
    { 
     if (preg_match('/^\s*"?(SELECT)\s+/i', $sql)) 
     { 
      $this->affect_rows = count($result_id->fetchAll()); 
      $result_id->execute(); 
     } 
     else 
     { 
      $this->affect_rows = $result_id->rowCount(); 
     } 
    } 
    else 
    { 
     $this->affect_rows = 0; 
    } 

    return $result_id; 
} 

,測試如果$ sql中包含「SELECT」裏面沒有工作的一部分,所以當我試圖插入「$ result_id-> execute()」被調用兩次。