返回重复的ID

时间:2018-01-31 20:46:19

标签: php mysql sql pdo

有了这个查询

$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 $queryINSERT ?像

这样的东西
$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

1 个答案:

答案 0 :(得分:0)

users(name)上创建唯一索引。

然后,在违反唯一索引时捕获错误。

这与on duplicate key update无关。

name上的唯一索引非常高,强烈建议用于此目的。您的代码不是线程安全的。两个线程可以具有相同的name。每个人都可以检查它是否存在。每个人都可以尝试插入它。所有这些努力 - 无论如何你都会得到重复。

让数据库执行它应该做的事情 - 保护您的数据。定义唯一索引/约束。