MySQL / PHP:同一行在Database上获得两次INSERTED

时间:2017-02-18 12:54:31

标签: php mysql pdo

我之前已经看到过这个问题的答案,但没有我可以应用的解决方案。我正在通过Chrome进行本地测试(Apache)(这可能是罪魁祸首吗?),没办法,无法让它运行起来。将我的代码剥离到最低限度。这是PHP代码:

$host = 'localhost';
$user = 'root';
$pass = 'pippo';
$database = 'test';

//this is optional, removing it doesn't change anything

$options = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => false);

$pdo = new PDO("mysql:host=$host;dbname=$database", $user, $pass, $options);
$sql = "INSERT INTO user (`username`, `dob`) VALUES ('wallyxx', '458')"; 

$statement = $pdo->prepare($sql); 
$inserted = $statement->execute();
if($inserted){echo 'Row inserted!<br>';}

这里出了什么问题?有人可以帮忙吗? 谢谢你的帮助。罗伯特

更新:我注意到如果我进入数据库管理器(adminer)并删除一些记录,下次我运行teh片段时,我会得到一条记录。这是我不知道的某种HTTP问题吗?

3 个答案:

答案 0 :(得分:1)

删除

 $inserted = $statement->execute();
 if($inserted){echo 'Row inserted!<br>';}

添加:

 if($statement->execute()){echo 'Row inserted!<br>';}

也尝试:

删除此:

$options = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => false);

替换为

$options = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, )

答案 1 :(得分:0)

你的剧本没有错。

即使最后一个条件是写,因为$statement->execute()将根据文档http://php.net/manual/en/pdostatement.execute.php

返回布尔值

检查您的申请并确保您不会多次包含相同的脚本。使用require_once代替requireinclude_once代替include

我还建议将此脚本放在偶数类的函数中。如果你不知道怎么做,这个tutorial是一个好的开始(它是用mysqli写的,但它可以添加到pdo)。更好的是,如果您正在使用作曲家,那么您应该随意使用此存储库,这将简化您的一切https://bitbucket.org/kisphp/kisphp-database.git

答案 2 :(得分:0)

谢谢大家,我测试了你的想法但没有改变。 但显然问题只出现在本地服务器上。 我把所有东西放在“真正的服务器”上,事情似乎很顺利。仅排了一排,测试了很多。 如果我将找出Apache的这种奇怪行为的原因,我将发布调查结果。现在我注意到,有时第二次调用是在短暂的延迟之后发生的,所以必须在我的本地服务器中循环...谁知道。 就目前而言,由于似乎“在现实世界中”任何时候都只记录了一行,我正在追寻其他问题,并将其视为“已解决”。感谢所有投入时间努力帮助的人。 罗伯特