出于某种原因,我无法从LastInsertId
插页中获取PDO
。我没有收到任何回复,如果我把它放在执行中我得到-1因为插入查询没有运行。但是当刚刚执行到抓取插入的最后一个ID之后,没有返回任何内容。
php 5.1.6
PECL pdo = 0.1.0
我查看过以下问题和许多其他堆栈交换问题。
然而,与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";
答案 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";