Используя ПОСЛЕДНИЙ ИДЕНТИФИКАТОР ВСТАВКИ() через 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];

Для меня ненадежно выбирать новый идентификатор по коду встраивания, так как код встраивания может быть повторен.

Спасибо!

Author: Mike Moore, 2010-08-06

7 answers

Разве ваш класс базы данных не содержит функцию для захвата последнего идентификатора вставки? Попробуйте mysql_insert_id() в противном случае вместо этого.

Http://nl.php.net/mysql_insert_id

 4
Author: Sebs, 2010-08-06 16:14:20

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

 1
Author: David, 2010-08-06 16:13:48

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

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

 0
Author: John Parker, 2010-08-06 16:15:37

Вы можете попробовать использовать PHP mysql_insert_id функция.

Я думаю, что происходит то, что каждый вызов DB::query находится в другой транзакции, следовательно, $row пуст. Возможно, вы можете прочитать документацию DB:query, чтобы попробовать выполнить оба вызова в рамках одной транзакции.

 0
Author: Pablo Santa Cruz, 2010-08-06 16:15:48

Mysql_insert_id устарел. Поэтому я думаю, что эту тему необходимо обновить.

 0
Author: user596387, 2015-04-27 17:50:32

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'];
}
 0
Author: Franz Holzinger, 2015-06-15 13:21:34

Вы должны вернуть последний идентификатор PDO для внешнего элемента вашего класса. пример:

class DB
{
    public $last_insert_id;
    function x()
    {
        $stmt = $db->prepare($Query);
        $stmt->execute();
        $this->last_insert_id = $db->lastInsertId();
    }    
}
 0
Author: saeed, 2016-01-07 11:13:58