2

出于某种原因,我无法LastInsertId从我的PDO插入中获得。我没有收到任何回复,如果我将它放在执行中,我会得到 -1,因为插入查询没有运行。但是,当刚刚执行抓取插入的最后一个 ID 之后,什么都不会返回。

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

插入/返回最后一个 id

$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"; 
4

3 回答 3

1

你应该使用

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

只需_seq在 id 之后添加。

于 2015-05-26T12:57:40.300 回答
0

假设 sheet_id 类型是SERIAL你可以使用LASTVAL()

尝试(未测试,因为我没有 postgresql)

$newsheetID = $conn->query("SELECT LASTVAL()");
echo $newsheetID . "last id"; 
于 2013-09-09T20:46:30.843 回答
0

我在 C# 中使用带有“返回行键”的 postgresql,它一直对我有用。
我还在很多应用程序中使用 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"; 
于 2017-02-17T16:53:39.763 回答