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'].'")');
}
}
?>
有條件的作品,我無法同值多次提交不管我怎麼快速點擊提交按鈕。
有沒有可靠的方法來防止重複的數據庫插入與第一個代碼片段發生,以便它的行爲就像第二個片段?
如果您不希望表中的多行具有相同的值,則應在數據庫中使用唯一約束對其進行設置。 –