Когда я выполняю следующее в консоли MySQL, оно хорошо работает:
INSERT INTO videos (embed_code) VALUES ('test code here');
SELECT LAST_INSERT_ID();
Но, когда я выполняю вышеупомянутые запросы через PHP, результат пуст.
При абстракции данных я использую названный класс доступа к базе данных DB
. Это - то, как я попробовал вышеупомянутые запросы через PHP:
$embedCode = htmlentities($_POST['embed_code']);
//Insert video in database **WORKS**
DB::query("INSERT INTO videos (embed_code) VALUES ('$embedCode');");
//Retrieve id **DOES NOT WORK**
$row = DB::getSingleRow("SELECT LAST_INSERT_ID();");
$videoId = $row[0];
Это не надежно, чтобы я выбрал новый идентификатор embed_code, поскольку embed_code мог быть повторен.
Спасибо!
Разве в вашем классе базы данных нет функции для получения последнего идентификатора вставки? В противном случае попробуйте mysql_insert_id ().
В PHP есть функция mysql_insert_id
, которая даст тот же результат, что и запрос SELECT LAST_INSERT_ID ();
.
Вы можете попробовать использовать mysql_insert_id
функцию PHP.
Я думаю, что происходит то, что каждый вызов DB::query
происходит в другой транзакции, поэтому $row
пустой. Возможно, вы можете прочитать документацию по DB:query
, чтобы попробовать выполнить оба вызова в одной транзакции.
Для этого существуют специальные функции - вы не должны использовать версию SQL, так как она не работает.
В библиотеке MySQL вы должны использовать функцию mysql_insert_id, в то время как объект mysqli имеет свойство insert-id. Конечно, это свойство уже может быть открыто в любом классе БД, который вы используете.