PDO LastInsertId什么都不返回

时间:2013-09-09 11:37:33

标签: pdo postgresql-9.2 lastinsertid

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

php 5.1.6
PECL pdo = 0.1.0

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

  1. lastInsertId does not work in Postgresql
  2. PDO lastInsertId() returns 0
  3. PDO lastInsertId issues, php
  4. 然而,与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"; 
    

3 个答案:

答案 0 :(得分:1)

您应该使用

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

只需在id。

之后添加_seq即可

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

我在C#中使用postgresql和“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";