PDO LastInsertId ничего не возвращает

По какой-то причине я не могу получить LastInsertId из вставки PDO. Я ничего не получаю в ответ, если я помещу его в выполнение, я получу -1, потому что запрос на вставку не был запущен. Однако, когда сразу после выполнения для захвата последнего вставленного идентификатора ничего не возвращается.

php 5.1.6
PECL pdo = 0.1.0

Я рассмотрел следующие вопросы и многие другие вопросы по обмену стеками.

  1. lastInsertId не работает в Postgresql
  2. PDO lastInsertId() возвращает 0
  3. проблемы PDO lastInsertId, php

Однако разница в том, что ничего не возвращается по сравнению с 0. Ошибки также не фиксируются. См. код ниже.

Подключение

try {
  $conn = new PDO("pgsql:host=localhost port= dbname=", "", "");
  echo "PDO connection object created";
}
catch(PDOException $e) {
  echo $e->getMessage();
}

вставить/вернуть последний идентификатор

$stmt = $conn ->prepare("INSERT INTO sheet_tbl (site_id,  username, additionalvolunteers) VALUES(?,?,?)"); 
$stmt->bindParam(1,$site_id);
$stmt->bindParam(2,$username1);
$stmt->bindParam(3,$additionalvolunteers);
$site_id = $_POST['site_id'];   
$username1 = $user->name;
$additionalvolunteers = $_POST['additionalvolunteers'];
$stmt ->execute();
$newsheetID = $conn->lastInsertId('sheet_id');
echo $newsheetID . "last id"; 

person Tom    schedule 09.09.2013    source источник
comment
У вас действительно вставлена ​​строка?   -  person Your Common Sense    schedule 09.09.2013
comment
Привет, да, в настоящее время строка вставляется в строку 23, но sheet_id = 115 @YourCommonSense   -  person Tom    schedule 09.09.2013
comment
Возможный дубликат Получить идентификатор последней вставки после подготовленной вставки с PDO   -  person Alastair Irvine    schedule 04.08.2016


Ответы (3)


Вы должны использовать

$newsheetID = $conn->lastInsertId('sheet_id_**seq**');

Просто добавьте _seq после идентификатора.

person Ant    schedule 26.05.2015

Предполагая, что тип sheet_id - SERIAL, вы можете использовать LASTVAL()

ПОПРОБУЙТЕ (не проверено, так как у меня нет postgresql)

$newsheetID = $conn->query("SELECT LASTVAL()");
echo $newsheetID . "last id"; 
person david strachan    schedule 09.09.2013

Я использую postgresql в C# с «RETURNING rowkey», и это всегда работало для меня.
Я также использую pdo/php во многих приложениях.
Однако сейчас у меня нет базы данных postgres, открытой на сервере. для тестирования.

Это должно работать, но не проверено.

$site_id = $_POST['site_id'];   
$username1 = $user->name;
$additionalvolunteers = $_POST['additionalvolunteers'];

$stmt = $conn ->prepare("INSERT INTO sheet_tbl (site_id,  username, additionalvolunteers) VALUES(:site_id, :username1, :additionalvolunteers) RETURNING row_id"); 

$success = $stmt->execute([
    'site_id' => $site_id,
    'username1' => $username1,
    'additionalvolunteers' =>  $additionalvolunteers
]);
// unsure about this
$newsheetID =  $stmt->fetchColumn();
echo $newsheetID . " last id"; 
person Gauthier    schedule 17.02.2017