的全局唯一标识符在数据库中,我认为你将不得不自行处理事务ID在你的应用程序,或项目ID在你的应用程序以完美无瑕地执行此操作。 (!),这样做可能工作,假设所有的刀片成功
的一种方式,如下:
然后,您可以获取插入的ID与受影响的行数,从一环lastid(这是批量插入的第一个插入ID)。 就这样,我检查它完美..只是要小心,HeidiSQL例如将不返回ROW_COUNT()的正确值,可能是因为它是一个蹩脚的GUI做随机狗屎,我们不问它 - 但它是从完全正确的命令行或PHP的mysqli -
START TRANSACTION;
BEGIN;
INSERT into test (b) VALUES ('1'),('2'),('3');
SELECT LAST_INSERT_ID() AS lastid,ROW_COUNT() AS rowcount;
COMMIT;
在PHP它看起来像这样(local_sqle是mysqli_query直呼叫,local_sqlec是调用mysqli_query +转换结果集到PHP数组):
local_sqle("START TRANSACTION;
BEGIN;
INSERT into test (b) VALUES ('1'),('2'),('3');");
$r=local_sqlec("SELECT LAST_INSERT_ID() AS lastid,ROW_COUNT() AS rowcount;");
local_sqle("
COMMIT;");
$i=0;
echo "last id =".($r[0]['lastid'])."<br>";
echo "Row count =".($r[0]['rowcount'])."<br>";
while($i<$r[0]['rowcount']){
echo "inserted id =".($r[0]['lastid']+$i)."<br>";
$i++;
}
查询分开的原因是因为我不会使用我自己的函数得到我的结果,如果哟你用标准函数做这件事,你可以把它放回到一个语句中,然后检索你需要的结果(它应该是结果2号 - 假设你使用了一个处理多个结果集/查询的扩展)。
为什么你不能一个一个插入它们? – sanmai
你需要模拟'OUTPUT'子句。我相信你可以在MySQL中使用触发器来做到这一点 –
你不能使用批量插入,然后函数石灰last_insert_id(),它不起作用。 –