有了这个查询
$query = 'INSERT INTO users(name) VALUES (:name)';
$stmt = $pdo->prepare($query);
$stmt->execute(['name' => $_POST['name']]);
INSERT
进入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']]);
}
如果PDO
失败到FETCH
,是否可以Duplicated
id
$query
行INSERT
?像
$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
答案 0 :(得分:0)
在users(name)
上创建唯一索引。
然后,在违反唯一索引时捕获错误。
这与on duplicate key update
无关。
name
上的唯一索引非常高,强烈建议用于此目的。您的代码不是线程安全的。两个线程可以具有相同的name
。每个人都可以检查它是否存在。每个人都可以尝试插入它。所有这些努力 - 无论如何你都会得到重复。
让数据库执行它应该做的事情 - 保护您的数据。定义唯一索引/约束。