У меня есть следующие таблицы:
thread: id, title, content, created
thread_tags: tag_id, thread_id
tag: id, name
author_threads: thread_id, author_id
Чтобы создать поток, все эти поля должны быть заполнены (идентификаторы, очевидно, автоматически увеличиваются).Я знаю, что могу использовать SQL TRANSACTIONS, чтобы убедиться, что все они заполнены или отсутствуют, но как мне заполнить tag_id, thread_id, author_id и thread_id (в author_threads) из последнего оператора sql?Без транзакции я бы использовал mysqli_last_insert_id.
Также я должен использовать mysqli::multi_query
?Как мне убедиться, что все эти поля заполнены?
О, и я использую PHP с MYSQL.
РЕДАКТИРОВАТЬ:
Будет ли это работать?
$sql_thread = "START TRANSACTION;
INSERT INTO thread (title, content)
VALUES ('some title', 'some content')";
# this is normally a loop, as there are more than one tags:
$sql_tags = "INSERT INTO tag (name)
VALUES ('onetag')";
# normally I would check the return value
mysqli_query($link, $sql_thread);
# get the thread id:
$thread_id = mysqli_insert_id($link);
mysqli_query($link, $sql_tags);
# get the tag id:
$tag_id = mysqli_insert_id($link);
# insert into thread_tags:
mysqli_query($link, "INSERT INTO thread_tags (thread_id, tag_id) VALUES ($thread_id, $tag_id)");
# insert into author_threads, I already know author_id:
mysqli_query($link, "INSERT INTO author_threads (author_id, thread_id) VALUES ($author_id, $thread_id)
COMMIT;");