【发布时间】:2013-11-01 12:40:41
【问题描述】:
我正在使用 CodeIgniter 进行开发,一段时间后我注意到所有查询都被执行了两次,如下面的 mySQL 日志所示:
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 中有一些错误的数据库配置,你们有人知道发生了什么吗?
【问题讨论】:
-
您是否尝试过对模型进行独立调用,该模型会进行虚拟查询,以检查它是否被调用了两次。如果不是,则错误在代码中的某个地方,循环或其他东西进行了双重调用
-
其实我没有在模型之外尝试过,但是如果代码中有一些额外的调用,日志应该会有所不同。例如,我有一个函数先选择,然后再插入,如果这个函数被调用两次,日志应该是“SELECT INSERT SELECT INSERT”,但日志显示“SELECT SELECT INSERT INSERT”。
-
你能发布一个被调用两次的模型方法的例子吗?
-
每次我从 codeigniter 调用这个函数时:“$this->db->query($sql);”。 Codeigniter 运行 $sql 字符串查询两次。但是有一个有趣的事实,如果字符串 $sql 有两个或多个单独的命令,比如:“INSERT INTO user VALUES (1,2,3); INSERT INTO user VALUES (5,4,2);” , Codeigniter 只运行一次。我在想也许这与分号“;”有关,但我不确定。
-
我打开了另一个问题,实际上是同样的问题:stackoverflow.com/questions/19726961/…
标签: php mysql sql codeigniter