我正在从大学,我需要在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
;
也许你的F5键坏了? :D改为'VALUES('title'' make it'VALUES('.uniqid()。''所以你会看到代码执行两次或单独查询 – Peter
当我尝试你的方式时,标题是不同的。自动刷新页面以再次触发查询,并且在执行后,我正在处理页面以阻止任何其他代码的运行。 –
'当我尝试你的方式时,标题是不同的。好吧,但不知怎的,你运行两次,我不能帮你没有更多的信息,它可能是浏览器问题,你需要做更多的调查 – Peter