Используя ПОСЛЕДНИЙ ИДЕНТИФИКАТОР ВСТАВКИ() через PHP?
Когда я выполняю следующее в консоли 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];
Для меня ненадежно выбирать новый идентификатор по коду встраивания, так как код встраивания может быть повторен.
Спасибо!
7 answers
Разве ваш класс базы данных не содержит функцию для захвата последнего идентификатора вставки? Попробуйте mysql_insert_id() в противном случае вместо этого.
В PHP есть функция mysql_insert_id
, которая даст вам тот же результат, что и запрос SELECT LAST_INSERT_ID();
.
Для этого существуют специальные функции - вы не должны использовать версию SQL, так как она не работает.
В библиотеке MySQL вы должны использовать функцию mysql_insert_id, в то время как объект mysqli имеет свойство insert-id. Это, конечно, уже может быть доступно в любом классе БД, который вы используете.
Вы можете попробовать использовать PHP mysql_insert_id
функция.
Я думаю, что происходит то, что каждый вызов DB::query
находится в другой транзакции, следовательно, $row
пуст. Возможно, вы можете прочитать документацию DB:query
, чтобы попробовать выполнить оба вызова в рамках одной транзакции.
Mysql_insert_id устарел. Поэтому я думаю, что эту тему необходимо обновить.
Mysql_insert_id помечен как устаревший начиная с PHP 5.5.0.
В этом примере uid является первичным ключом таблицы видео.
$row = DB::getMultipleRows("SELECT uid FROM videos WHERE uid=LAST_INSERT_ID();");
if (
isset($row) &&
is_array($row) &&
isset($row['0']) &&
is_array($row['0']) &&
isset($row['0']['uid'])
) {
$videoId = $row['0']['uid'];
}
Вы должны вернуть последний идентификатор PDO для внешнего элемента вашего класса. пример:
class DB
{
public $last_insert_id;
function x()
{
$stmt = $db->prepare($Query);
$stmt->execute();
$this->last_insert_id = $db->lastInsertId();
}
}