Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysqli_insert_id()是从整个服务器还是从同一用户获取记录?_Php_Mysqli - Fatal编程技术网

Php mysqli_insert_id()是从整个服务器还是从同一用户获取记录?

Php mysqli_insert_id()是从整个服务器还是从同一用户获取记录?,php,mysqli,Php,Mysqli,我有一个mysql问题,mysqli\u insert\u id()从整个服务器或插入该id的特定用户返回记录?因为如果它从总体上返回,那么使用此函数就不安全了。上面@daan的评论完全是错误的insert_id()返回放入执行insert_id()查询的连接执行的最后一次insert查询的自动增量字段中的id 它不返回表中最大的ID,不返回其他连接创建的ID,也不返回其他用户创建的ID 它实际上是由您执行的插入操作创建的最后一个ID 这意味着执行插入、通过last\u insert\u ID(

我有一个mysql问题,
mysqli\u insert\u id()
从整个服务器或插入该id的特定用户返回记录?因为如果它从总体上返回,那么使用此函数就不安全了。

上面@daan的评论完全是错误的
insert_id()
返回放入执行insert_id()查询的连接执行的最后一次
insert
查询的自动增量字段中的id

它不返回表中最大的ID,不返回其他连接创建的ID,也不返回其他用户创建的ID

它实际上是由您执行的插入操作创建的最后一个ID

这意味着执行插入、通过
last\u insert\u ID()
获取创建的ID,然后在其他查询中使用该ID来创建父/子记录是100%可靠的

但是请注意,
insert_id()
只返回一个id值。如果执行多值插入,仍然只能从最后一个值集中获取ID,例如

INSERT INTO sometable (x, y) VALUES (1,2), (2,3)
仍然在内部执行两次插入,您只能获得
2,3
元组的id,而不是
1,2

此外,以前的所有查询都没有内存:

INSERT ...   // query #1
INSERT ...   // query #2
SET id = last_insert_id();

将只获取查询#2创建的ID,而查询#1中的ID“丢失”。

上面@daan的注释完全错误
insert_id()
返回放入执行insert_id()查询的连接执行的最后一次
insert
查询的自动增量字段中的id

它不返回表中最大的ID,不返回其他连接创建的ID,也不返回其他用户创建的ID

它实际上是由您执行的插入操作创建的最后一个ID

这意味着执行插入、通过
last\u insert\u ID()
获取创建的ID,然后在其他查询中使用该ID来创建父/子记录是100%可靠的

但是请注意,
insert_id()
只返回一个id值。如果执行多值插入,仍然只能从最后一个值集中获取ID,例如

INSERT INTO sometable (x, y) VALUES (1,2), (2,3)
仍然在内部执行两次插入,您只能获得
2,3
元组的id,而不是
1,2

此外,以前的所有查询都没有内存:

INSERT ...   // query #1
INSERT ...   // query #2
SET id = last_insert_id();


将只获取由查询#2创建的ID,而来自查询#1的ID“丢失”。

@ZainFarooq在执行函数mysqli_insert_ID()之前,php中有一个名为mysqli_connect()的函数连接到服务器,然后选择数据库以获取记录。

对于mysqli_insert_ID()函数yes使用起来是完全安全的,它返回一个表上的查询生成的ID,该表的列具有AUTO_INCREMENT属性。如果最后一个查询不是INSERT或UPDATE语句,或者修改后的表没有具有AUTO_INCREMENT属性的列,则此函数将返回零。

@ZainFarooq在执行函数mysqli_INSERT_id()之前,有一个称为mysqli_connect()的函数函数连接到服务器,然后选择要获取记录的数据库。

对于mysqli_insert_id()函数,是的,它可以完全安全地使用,并返回查询表生成的id,该表的列具有AUTO_INCREMENT属性。如果最后一个查询不是INSERT或UPDATE语句,或者如果修改后的表没有具有AUTO_INCREMENT属性的列,则此函数将返回零。

那么使用它是否安全?是的,为什么使用它不安全?因为它可以返回其他用户的记录如果您不使用准备好的语句,那么是的;您的代码不安全。@ZainFarooq-它是安全的!它显式地绑定到连接,并且一次只有一个用户拥有该连接,那么使用它是否安全?是的,为什么使用它不安全?因为它可以返回其他用户的记录如果您没有使用准备好的语句,那么是的;您的代码不安全。@ZainFarooq-它是安全的!它显式地绑定到连接,并且一次只有一个用户具有该连接OK。我想知道它如何区分服务器上的用户?我没有看到Daan的评论;他可能把它删掉了。我不记得自己见过它,所以应该把它取出来。@ZainFarooq:因为它与特定的连接有关。即使您的代码同时打开了与数据库的多个连接,id函数也知道调用它的是哪个连接,并且只会返回由该特定连接生成的id。@MarcB:但连接到服务器和数据库时,每个用户的连接总是相同的。否。不是。通信协议是相同的,但每个连接本身都是唯一的/不同的。每个连接基本上都有自己的内部ID号,并且在多个连接中永远不会重复。即使使用相同的凭据在同一脚本中连接2次以上,连接仍将具有不同的内部标识符。别再为这个争论了。如果insert_id()是一个“全局”id,那么它将是一个完全无用的函数,并且不可能可靠地检索生成的id。它起作用了。它100%可靠。故事结束了。我想知道它如何区分服务器上的用户?我没有看到Daan的评论;他可能把它删掉了。我不记得自己见过它,所以应该把它取出来。@ZainFarooq:因为它与特定的连接有关。即使您的代码同时打开了多个到DB的连接,id函数也知道调用它的是哪个连接,并且只会返回由该特定连接生成的id。@MarcB:但是当连接到数据库时,每个用户的连接总是相同的