2
我这个代码测试:PHP的MySQL防止快速的形式重复插入提交
<?php
$db = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');
if(filter_has_var(INPUT_POST, 'submit')) {
$r = $db->query('SELECT * FROM test WHERE value="'.$_POST['value'].'"');
$n = $r->rowCount();
for ($i=0; $i<=10000000; $i++) {
// do nothing
}
if (!$n) {
$db->query('INSERT INTO test (id, value) VALUES (NULL, "'.$_POST['value'].'")');
}
}
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="text" name="value" value="">
<input type="submit" name="submit" value="Submit">
</form>
当测试Safari中的上述表格我能提交相同的值到我的数据库多次通过快速点击提交按钮。
但是,当我使用此代码测试:
<?php
$db = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');
if(filter_has_var(INPUT_POST, 'submit')) {
for ($i=0; $i<=10000000; $i++) {
// do nothing
}
$r = $db->query('SELECT * FROM test WHERE value="'.$_POST['value'].'"');
$n = $r->rowCount();
if (!$n) {
$db->query('INSERT INTO test (id, value) VALUES (NULL, "'.$_POST['value'].'")');
}
}
?>
有条件的作品,我无法同值多次提交不管我怎么快速点击提交按钮。
有没有可靠的方法来防止重复的数据库插入与第一个代码片段发生,以便它的行为就像第二个片段?
如果您不希望表中的多行具有相同的值,则应在数据库中使用唯一约束对其进行设置。 –