@lucsieus
начинающий самурай

MySQL как вставить запись если не существует в таблице?

MySQL как вставить запись если не существует в таблице?
Мой код, прошу найдите ошибку. В запросах MySQL все ок, но через pdo как то не идет. В чем моя ошибка?
$sth = $dbh->prepare("SELECT COUNT(`id_operator`) FROM `operators`");
$sth->execute();
$count = $sth->fetchAll(PDO::FETCH_ASSOC);
$id = $count['0']['COUNT(`id_operator`)'] + 1;

$sth = $dbh->prepare("INSERT INTO operators (id_operator, name_operator) 
SELECT * FROM (SELECT `id_operator` =:id_operator, `name_operator` =:name_operator) AS tmp 
WHERE NOT EXISTS( 
SELECT name_operator FROM operators WHERE name_operator =:name_operator
) LIMIT 1");
$sth->execute(array(
    'id_operator'    => 25,
    'name_operator'  => 'Ернат'));
  • Вопрос задан
  • 1694 просмотра
Пригласить эксперта
Ответы на вопрос 2
rozhnev
@rozhnev Куратор тега PHP
Fullstack programmer, DBA, медленно, дорого
INSERT IGNORE имеет несколько недостатков:
  • игнорирует все ошибки, а не только ошибку уникального индекса
  • в любом случае увеличивает числовой индекс


Поэтому следует выполнить проверку и вставку в 2 этапа:
<?php
$operator = "Borat";

// Check if operator exists
$stmt = $pdo->prepare(
    "SELECT id_operator FROM operators WHERE name_operator =:name_operator;"
);

$stmt->execute(["name_operator" => $operator]);
$result = $stmt->fetch(PDO::FETCH_ASSOC);

// If not exists store new record
if (!$result) {
    $sth = $pdo->prepare(
        "INSERT INTO operators (name_operator) VALUES (:name_operator);"
    );

    $sth->execute(["name_operator" => $operator]);
    $id_operator = $pdo->lastInsertId();
} else {
    $id_operator = $result["id_operator"];
}

echo "id_operator: $id_operator";


Test PHP code online
Ответ написан
Adamos
@Adamos
MySQL как вставить запись если не существует в таблице?

INSERT IGNORE же, без всей этой груды селектов.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы