PDO LastInsertId ничего не возвращает
По какой-то причине я не могу получить LastInsertId
от моего PDO
вставить. Я ничего не получаю обратно, если я помещаю его в команду execute, я получаю -1, потому что запрос на вставку не был выполнен. Однако, когда сразу после выполнения захватывает последний вставленный идентификатор, ничего не возвращается.
php 5.1.6
PECL pdo = 0.1.0
Я посмотрел на следующие вопросы и многие другие вопросы обмена стека.
- lastInsertId не работает в Postgresql
- PDO lastInsertId () возвращает 0
- Проблемы с 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";
3 ответа
Вы должны использовать
$newsheetID = $conn->lastInsertId('sheet_id_**seq**');
Просто добавь _seq
после идентификатора
Предполагая, что тип sheet_id является SERIAL, вы можете использовать LASTVAL()
ПОПРОБУЙТЕ (не проверено, поскольку у меня нет postgresql)
$newsheetID = $conn->query("SELECT LASTVAL()");
echo $newsheetID . "last id";
Я использую 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";