Использование последнего 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 () в противном случае.

http://nl.php.net/mysql_insert_id


PHP имеет функцию mysql_insert_id, который даст вам тот же результат, что запрос SELECT LAST_INSERT_ID();.


для этого есть специальные функции - вы не должны использовать версию SQL, поскольку она не работает.

в библиотеке MySQL вы должны использовать mysql_insert_id функция, тогда как объект mysqli имеет insert-id собственность. Это, конечно, может быть уже представлено в любом классе DB, который вы используете.


вы можете попробовать с PHP mysql_insert_id


mysql_insert_id является устаревшим. Поэтому я думаю, что эта тема должна быть обновлена.


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();
    }    
}