Intereting Posts
Отправленные письма с phpmailer не отправляются в папку «Отправленные» IMAP Переписывание URL-адресов назад и вперед с помощью mod_rewrite Должен ли я передавать переменную $ mysqli для каждой функции? что произойдет, если php.ini отсутствует? Laravel 4 построитель запросов – со сложными левыми соединениями Как использовать Wine из Apache / Php? – '/ var / www' не принадлежит вам Предупреждение: mysql_fetch_array (): предоставленный аргумент не является допустимым ресурсом результата MySQL Сохранение пространственных данных в CakePHP file_get_contents («php: // input») или $ HTTP_RAW_POST_DATA, какой из них лучше получить тело запроса JSON? Запросить набор точек в AREA на расстоянии от сегмента линии Как установить umask для php5-fpm на Debian? Зарегистрировать форму с помощью php, mysql PHP mkdir () и fopen () не работают – проблема с разрешениями? проблема umask? Снять конкретные слова из строки Проверьте, существует ли запись

Использование LAST_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]; 

Неверно для меня выбрать новый id с помощью embed_code, так как embed_code можно было бы повторить.

Благодаря!

Разве ваш класс базы данных не содержит функцию для захвата последнего идентификатора вставки? Вместо этого попробуйте 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, который вы используете.

Вы можете попробовать с помощью функции 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(); } }