相关疑难解决方法(0)

mysql_insert_id替代postgresql

是否有替代mysql_insert_id()PostgreSQL的PHP​​函数?大多数框架通过查找ID中使用的序列的当前值来部分解决问题.但是,有时主键不是串行列....

php postgresql insert-id

22
推荐指数
2
解决办法
2万
查看次数

Postgresql和PHP:在多用户应用程序中,currval是一种检索最后一行插入id的有效方法吗?

我想知道我用来检索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);
Run Code Online (Sandbox Code Playgroud)

好吧,它只是一个测试atm.但无论如何,我可以用这种方式看到3个问题:

  1. 引用customer_id_seq,如果两个用户在同一时间做同样的事情,可能会发生他们都从那个方式获得相同的id ......或者不是?
  2. 必须知道表的序列名称.知道pg_get_serial_sequence不适用于我(在postgresql上我是新手,可能是配置问题)

有什么建议/更好的方法吗?

ps:我不能使用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);
Run Code Online (Sandbox Code Playgroud)

php postgresql insert-id

3
推荐指数
1
解决办法
6775
查看次数

获取Postgresql的最后一个插入ID

根据问题:

PHP Postgres:获取上次插入ID

他们已经声明检索最后一个插入ID的最佳方法是:

INSERT INTO ....
RETURNING id;
Run Code Online (Sandbox Code Playgroud)

我想为Postgresql创建一个包装类,以便在运行时,例如:

$id = $db_wrapper->insert("INSERT...");
Run Code Online (Sandbox Code Playgroud)

它将始终返回插入变量的最后一个id $id.我不知道将传递给insert()函数的查询的auto_inc列名称,我宁愿不必添加"RETURNING id"到我的所有插入查询的末尾 - 关于如何实现这一点的任何想法?

postgresql

3
推荐指数
2
解决办法
1万
查看次数

标签 统计

postgresql ×3

insert-id ×2

php ×2