Использование последнего INSERT ID () через 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];
для меня ненадежно выбирать новый идентификатор с помощью embed_code, так как embed_code может быть повторен.
спасибо!
7 ответов
разве ваш класс базы данных не содержит функцию для захвата последнего идентификатора вставки? Попробуйте mysql_insert_id () в противном случае.
PHP имеет функцию mysql_insert_id
, который даст вам тот же результат, что запрос SELECT LAST_INSERT_ID();
.
для этого есть специальные функции - вы не должны использовать версию SQL, поскольку она не работает.
в библиотеке MySQL вы должны использовать mysql_insert_id функция, тогда как объект mysqli имеет insert-id собственность. Это, конечно, может быть уже представлено в любом классе DB, который вы используете.
mysql_insert_id помечен как deprecated начиная с версии 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();
}
}