Могу ли я получить идентификатор INSERT/UPDATE одним запросом?

У меня есть следующий код:

$put_tag_rq = $DBH->prepare( "
  INSERT INTO `tags`
  SET
    `name` = :name
  ON DUPLICATE KEY UPDATE
    `id` = `id`
" );
$put_tag_rq->execute( array(
  'name' => $tag,
) );
$tag_id = $DBH->lastInsertId();
echo "***********Last insert ID = $tag_id<br>";

Обратите внимание, что name также является ключом вкладки.

Этот код работает нормально, если вставка name тег еще не представлен в таблице. Но lastInsertId() возвращает 0, если name уже здесь.

Конечно, я мог сделать два запроса: сначала проверить, name тег уже представлен на вкладке (и получить его идентификатор) и второй для вставки name уже представлен на вкладке.

Но я думаю, что это должно быть проще. Не так ли?

1 ответ

Решение

Это MySQL, который вы ищете: http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

И больше информации о том, как сделать это в php: PHP MYSQL UPDATE, если существует, или INSERT, если нет?

Другие вопросы по тегам