我想知道我用来检索
postgresql表中插入的最后一行的id的方式是有效的..
显然,它可以工作,但是当我有许多用户同时在同一个表中添加行时,引用串行序列currval值可能会有问题.
我的实际方式是:
$pgConnection = pg_connect('host=127.0.0.1 dbname=test user=myuser password=xxxxx')or die('cant connect'); $insert = pg_query("INSERT INTO customer (name) VALUES ('blabla')"); $last_id_query = pg_query("SELECT currval('customer_id_seq')"); $last_id_results = pg_fetch_assoc($last_id_query); print_r($last_id_results); pg_close($pgConnection);
好吧,它只是一个测试atm.
但无论如何,我可以用这种方式看到3个问题:
>引用customer_id_seq,如果两个用户在同一时间做同样的事情,可能会发生他们从那个方式得到相同的id ……或不?
>我必须知道表的序列名称.知道pg_get_serial_sequence不适用于我(在postgresql上我是新手,可能是配置问题)
有什么建议/更好的方法吗?
p.s:我不能使用PDO,因为似乎缺少事务保存点;我不会使用zend,最后,我更喜欢使用PHP pg_ *函数(也许我最终会构建我的类)
编辑:
@SpliFF(他们删除了他的回答):这会更好吗?
$pgConnection = pg_connect('host=127.0.0.1 dbname=test user=myuser password=xxxxx')or die('cant connect'); pg_query("BEGIN"); $insert = pg_query("INSERT INTO customer (name) VALUES ('blabla')"); $last_id_query = pg_query("SELECT currval('customer_id_seq')"); $last_id_results = pg_fetch_assoc($last_id_query); print_r($last_id_results); //do somethings with the new customer id pg_query("COMMIT"); pg_close($pgConnection);
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。