【发布时间】:2018-01-31 20:46:18
【问题描述】:
有这个查询
$query = 'INSERT INTO users(name) VALUES (:name)';
$stmt = $pdo->prepare($query);
$stmt->execute(['name' => $_POST['name']]);
INSERTing 进入Table: Users,其中列name 是UNIQUE。
而不是做两个查询
$check = 'SELECT EXISTS (SELECT name FROM users WHERE name = :name);'
$stmt = $pdo->prepare($check);
$stmt->execute(['name' => $_POST['name']]);
if ($stmt->fetchColumn() == 0) {
$query = 'INSERT INTO users(name) VALUES (:name)';
$stmt = $pdo->prepare($query);
$stmt->execute(['name' => $_POST['name']]);
}
如果$query 失败 到INSERT,是否可以使用PDO 到FETCH Duplicated 行id?类似的东西
$query = 'INSERT INTO users(name) VALUES (:name)';
$stmt = $pdo->prepare($query);
$stmt->execute(['name' => $_POST['name']]);
if ($stmt->duplicated() > 0) {
echo "Name already exists by the id number ".$stmt->duplicated()."";
}
如果无法返回Duplicated ID,我可以告诉是否有Duplication而不返回任何东西吗?
示例:
users
[id - name]
[1 - MARX]
[2 - MATH]
$query = 'INSERT INTO users(name) VALUES ('MARX')';
$stmt = $pdo->prepare($query);
$stmt->execute();
if ($stmt->duplicated() > 0) {
echo "Name already exists by the id number ".$stmt->duplicated()."";
} else {
echo "Name was Inserted";
}
Result: Name already exists by the id number 1
【问题讨论】:
-
有 ON DUPLICATE KEY UPDATE dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html
-
您可以同样使用
SELECT COUNT(*) FROM users WHERE name=:name并查看该值是否返回为零(不匹配)或其他任何表示重复的值。确保您对该列有UNIQUE约束,然后您将无法插入重复项。 -
在 20 多年的编程生涯中,我从未使用过
SELECT EXISTS()。 -
为什么需要复制它?如果你执行“SELECT id, name FROM users WHERE name = :name LIMIT 1”你会得到一行,或者你没有得到一行。如果你不这样做,则插入 $pdo->fetch(PDO::FETCH_ASSOC);如果你这样做
-
这也有效。对于中等数据库负载,即 SQL injection非常小心,并尽可能使用占位符值。