Когда я выполняю следующее в консоли 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];
Неверно для меня выбрать новый id с помощью embed_code, так как embed_code можно было бы повторить.
Благодаря!
Разве ваш класс базы данных не содержит функцию для захвата последнего идентификатора вставки? Вместо этого попробуйте mysql_insert_id ().
PHP имеет функцию mysql_insert_id
которая даст вам тот же результат, что и запрос SELECT LAST_INSERT_ID();
,
Для этого существуют специальные функции – вы не должны использовать SQL-версию, так как она не работает.
В библиотеке MySQL вы должны использовать функцию mysql_insert_id , тогда как объект mysqli имеет свойство insert-id . Это, конечно, уже может быть показано в любом классе DB, который вы используете.
Вы можете попробовать с помощью функции mysql_insert_id
PHP.
Я думаю, что происходит то, что каждый вызов 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']; }
вы должны вернуть lastInsertId из PDO в внешний класс вашего класса. пример:
class DB { public $last_insert_id; function x() { $stmt = $db->prepare($Query); $stmt->execute(); $this->last_insert_id = $db->lastInsertId(); } }