PDO LastInsertId 不返回任何内容

Posted

技术标签:

【中文标题】PDO LastInsertId 不返回任何内容【英文标题】:PDO LastInsertId returning nothing 【发布时间】:2013-09-09 11:37:32 【问题描述】:

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

php 5.1.6
PECL pdo = 0.1.0

我查看了以下问题和许多其他堆栈交换问题。

    lastInsertId does not work in Postgresql PDO lastInsertId() returns 0 PDO lastInsertId issues, 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"; 

【问题讨论】:

你有实际插入的行吗? 嗨,是的,该行当前插入第 23 行但 sheet_id = 115 @YourCommonSense Get last insert id after a prepared insert with PDO的可能重复 【参考方案1】:

你应该使用

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

只需在 id 后添加_seq

【讨论】:

【参考方案2】:

假设 sheet_id 类型为SERIAL,您可以使用LASTVAL()

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

$newsheetID = $conn->query("SELECT LASTVAL()");
echo $newsheetID . "last id"; 

【讨论】:

【参考方案3】:

我在 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"; 

【讨论】:

以上是关于PDO LastInsertId 不返回任何内容的主要内容,如果未能解决你的问题,请参考以下文章

PDO:lastInsertId 返回啥值? [复制]

PDO::lastInsertID 返回 0

为啥当我在 mysql 中调用 STORED PROCEDURE 时 pdo->lastInsertId() 返回 0?

PHP PDO::lastInsertId 返回 0

pdo lastInsertId() 不断返回 0

为啥 PDO 的 Oracle 驱动程序不实现 lastInsertId()?