2015-05-01 66 views
0

我正在从大学,我需要在PHP中创建一个任务管理系统(用户分配给其他用户的工作)的任务,我一直在得到一个恼人的错误,我可以不太明白为什么会发生。插入多行时,他们不应该

首先,我试着跟踪哪些函数被调用,看看他们中的一个是否被调用过两次,并且插入了第二行。然后我试着插入一个测试行到数据库中,而不使用所有处理它的类。它仍然会这样做,所以问题不在课堂上。

这是我最后一次使用测试代码(insert语句是一样的,从数据映射器的一个我用,只值我硬编码用于测试目的):

$sql = "INSERT INTO `jobs` (title, description, estimate, creator, responsible, lastEdit) VALUES ('".uniqid()."', 'some text', 48, 1, 2, NOW());"; 

// Note: I've already added the needed namespaces at the top of the page 

$db = new \PDO('mysql:host=' . Config::get('mysql/host') . 
      ';dbname=' . Config::get('mysql/db'), 
      Config::get('mysql/username'), 
      Config::get('mysql/password') 
     ); 
$db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); 

$query = $db->prepare($sql); 

$query->setFetchMode(\PDO::FETCH_ASSOC); 

$query->execute(); 
echo '<pre>'; 
var_dump($query); 
echo '</pre>'; 
die(); 

此代码插入2行(标题和ID不同)到数据库中。

有趣的事情是,var_dump显示查询是第一个条目。如果页面多次运行,它应该显示第二个条目或两者。

我在app /public/index.php入口处测试,没有任何重定向或刷新。我使用的重写URL(我使用MVC为我的网站)一个的.htaccess文件:

Options -MultiViews 
RewriteEngine On 

RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 

RewriteRule ^(.+) index.php?url=$1 [QSA,L] 

这里是创建jobs表代码:

CREATE TABLE `jobs` (
    `id` INT(11) NOT NULL AUTO_INCREMENT, 
    `title` VARCHAR(50) NOT NULL, 
    `description` TEXT NOT NULL, 
    `status` ENUM('INPROGRESS','FINISHED') NOT NULL DEFAULT 'INPROGRESS', 
    `estimate` INT(11) NOT NULL, 
    `creator` INT(11) NOT NULL, 
    `responsible` INT(11) NOT NULL, 
    `created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `lastEdit` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', 
    PRIMARY KEY (`id`), 
    INDEX `job_creator_key` (`creator`), 
    INDEX `job_responsible_key` (`responsible`), 
    CONSTRAINT `job_creator_key` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON UPDATE CASCADE ON DELETE CASCADE, 
    CONSTRAINT `job_responsible_key` FOREIGN KEY (`responsible`) REFERENCES `users` (`id`) ON UPDATE CASCADE 
) 
COLLATE='utf8_general_ci' 
ENGINE=InnoDB 
; 
+2

也许你的F5键坏了? :D改为'VALUES('title'' make it'VALUES('.uniqid()。''所以你会看到代码执行两次或单独查询 – Peter

+0

当我尝试你的方式时,标题是不同的。自动刷新页面以再次触发查询,并且在执行后,我正在处理页面以阻止任何其他代码的运行。 –

+0

'当我尝试你的方式时,标题是不同的。好吧,但不知怎的,你运行两次,我不能帮你没有更多的信息,它可能是浏览器问题,你需要做更多的调查 – Peter

回答

0

你的脚本执行两次,我知道为什么:

你的.htaccess被重定向所有丢失/ 404文件到index.php

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 

RewriteRule ^(.+) index.php?url=$1 [QSA,L] 

一ll文件喜欢..... favicon.ico

当您访问您的网站时,浏览器会自动尝试下载favicon.ico。但缺少这样的请求被重定向到index.php - 这就是为什么你运行两次index.php。

这些类型的错误可以很容易地在浏览器Web开发工具中调试,如萤火虫(标签“网络”),所以你可以看到所有的网站请求。您也可以检查Web服务器请求日志。

相关问题