PHP, Postgres使用RETURNING返回帮助

11

我认为我理解了PostgreSQL和RETURNING是如何工作的 - 我找到了许多资源。如果我理解得对,它看起来像是:

"INSERT INTO table (column2, column3) VALUES ('value1', 'value2') RETURNING id;"

然而,我找不到任何有助于我通过PHP访问它的东西。当我认为我已经弄清楚时,我尝试了

$new_id = pg_query($dbc, "INSERT INTO table (column2, column3) ".
"VALUES ('value1', 'value2') RETURNING id;");
return $new_id;

但它返回NULL。我还尝试使用一个查询分别执行和声明变量。在寻找解决方案的几个小时后,我选择了max(id) SELECT语句/函数,但仍然困扰着我。非常感谢任何帮助。

我正在使用Postgres 8.4和PHP 5.3。


你正在寻找最后插入的ID吗?如果是这样,也许这个链接可以帮到你:https://dev59.com/s3A85IYBdhLWcg3wF_i0 - Jason Swett
我知道如何返回最后插入的ID - 实际上有几种不同的方法。我想知道如何将返回的ID用于PHP变量中。 - regan_leah
1个回答

21

$new_id并不包含id,而是一个资源描述符。你需要从中获取数据,就像查询时使用SELECT一样,例如使用pg_fetch_array($new_id)

PostgreSQL的RETURNING子句会返回插入或修改行的任何字段,例如:INSERT|UPDATE … RETURNING id, field1, field2


那么,$resource = pg_query(...); $new_id = pg_fetch_array($resource); - regan_leah
1
实际上,由于该函数返回一个数组并且您需要其中的第一个(也是唯一的)值:list($new_id) = pg_fetch_row($resource); - Kouber Saparev
4
总之,$query = pg_query("INSERT ... RETURNING id"); $row = pg_fetch_row($query); $new_id = $row['0']; 的作用是插入数据并返回新记录的ID。谢谢! - regan_leah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接