尽管有前面的DROP TABLE语句

时间:2015-06-26 17:47:58

标签: php mysql codeigniter

我正在尝试支持使用mysql的另一个开发人员的CodeIgniter框架php。

代码执行以下操作(以及之前和之后):

$sql_case_00_4 = "DROP TABLE IF EXISTS top_domains_video_image_audio_detected";
$this->db->query($sql_case_00_4);

$sql_case_00_5 = "CREATE TABLE top_domains_video_image_audio_detected (domain_name varchar(255),genId varchar (12),trackingId int)";
$this->db->query($sql_case_00_5);

有时mysql会生成以下错误,我们会记录:"查询错误:表' top_domains_video_image_audio_detected'已存在"。这是代码中唯一生成表(或者完全使用表)的地方。

我想到的一种可能性是,如果两个请求同时尝试创建表,则可能发生竞争条件。

但这似乎很少见,因为没有多少人在查询此服务器,除非同一用户的两次背对背动作可能导致两个同时发出的请求。

我不是100%肯定,但我猜测query()函数会阻塞,从而阻止在DROP期间调用CREATE。

这还有其他可能导致这种情况吗?

3 个答案:

答案 0 :(得分:1)

一次尝试两个查询。 $sql_case_00_4 = "DROP TABLE IF EXISTS top_domains_video_image_audio_detected; CREATE TABLE top_domains_video_image_audio_detected (domain_name varchar(255),genId varchar (12),trackingId int)";

答案 1 :(得分:1)

我建议组合phpfreak或检查提到的两个查询,以确保您使用的db用户具有DROP权限。 (不确定您的Web应用程序是否会在此时抛出异常或无声地失败)。

答案 2 :(得分:0)

$ sql_case_00_4 =" DROP TABLE IF EXISTS top_domains_video_image_audio_detected; CREATE TABLE top_domains_video_image_audio_detected(domain_name varchar(255),genId varchar(12),trackingId int)&#34 ;;