Php 在插入过程中访问mysql insert的ID

Php 在插入过程中访问mysql insert的ID,php,mysql,Php,Mysql,是否有任何方法可以访问自动增量的id以便在查询中使用 例如,Wordpress将插入的id放在同一行的GUID中,是否有任何方法可以访问插入期间该行将采用的id 或者也许有一些快速的方法让我知道当前的人工智能计数器是什么,这样我就知道将要进入的是什么 我之所以需要它,是因为我正在尝试将WP posts表回填到我正在使用的新自定义post类型中,并且我需要将insert的id放入GUID列中。我假设您需要某种与用户id具有相同值的列。 但你为什么要这么做?只需使用用户ID,即使您使用它作为引用ID

是否有任何方法可以访问自动增量的id以便在查询中使用

例如,Wordpress将插入的id放在同一行的GUID中,是否有任何方法可以访问插入期间该行将采用的id

或者也许有一些快速的方法让我知道当前的人工智能计数器是什么,这样我就知道将要进入的是什么


我之所以需要它,是因为我正在尝试将WP posts表回填到我正在使用的新自定义post类型中,并且我需要将insert的id放入GUID列中。

我假设您需要某种与用户id具有相同值的列。
但你为什么要这么做?只需使用用户ID,即使您使用它作为引用ID。

也许mysql LAST\u INSERT\u ID()函数可以帮助您。

最后我拿出了最后一个id,就像这样:

$this->lID = mysql_fetch_assoc(mysql_query("SELECT ID FROM wp_posts ORDER BY ID DESC LIMIT 1"));
        $this->lID = $this->lID[ID];

好的,您不能访问正在插入的行的自动增量值。我建议插入该行,然后读取其ID并更新它,以填充需要知道其ID的字段

(为什么需要这样做?如果您有这样一个鸡蛋鸡问题,您的数据库似乎需要一些规范化。)

有关更多信息,请访问:
这是一种方法。这对我很有用:

1) 只需执行两个单独的MySql查询。第一个将post值插入wp_posts表。您应该在除“guid”列之外的所有列中插入一些占位符,如“0”

2) 第二个查询在第一个查询之后执行,在这里可以调用LAST_INSERT_ID()函数来获取前一个查询的真正LAST INSERT ID。第二个查询使用正确的ID号更新“guid”字段

例如,您可以将其插入到循环中,以便从csv文件批量插入WP帖子

您应该在站点离线时执行此操作,或者先锁定表,以便在其他表单之间不会出现其他查询请求。

示例:第1个查询(很抱歉设置了列格式,但更易于调试):

第二个问题:

$uid = mysql_insert_id();
$uiai = 'http://yoursite.net/wordpress/?post_type=post&p='.$uid;
mysql_query("UPDATE wp_posts SET guid = '$uiai' WHERE ID = '$uid'");
…此外,当您循环执行许多插入时,有时它会使PHP脚本的最大允许执行时间延长,上载会中断。它有助于使用设置时间限制(0);在整个脚本中,以便定期重置允许的最大时间计数器


…希望这有帮助:)

也许您可以在
信息\u架构中使用表的
自动增量值。。。选择
query。理论上,插入。。。选择
应锁定
信息\u架构。表
自动增量
值应为用于下一次
插入的Id。但是,您几乎不应该测试这个问题并考虑性能问题。

将LastIsIdTytId()返回当前插入行的ID吗?它不会。它将返回使用last INSERT query.Well插入的第一个ID。最后一个插入ID()+1给出了新的插入ID:)@Radoslav Georgiev:永远不要这样做。您无法保证其他连接不会同时插入新行(每个连接的最后一个\u insert\u ID()有效)。更不用说,它可能是另一个表中的ID。最后但并非最不重要的一点是,服务器可能被设置为将ID增加1以上。@Mhcl,谢谢您的建议;)我甚至不会想到这个解决方案,但它似乎是一个选择。(错误的选择)例如“插入到表(id、名称、地址、自动值)中的值(null、'John'、'10sycamore lane'、'MYSQL\u auto\u INCREMENT'),这是错误的。除非锁定表,否则其他连接可能会在SELECT和insert之间插入行。从长远来看,这可能会给您带来问题,因为Alessandro指出您是对的,但我需要使用此连接进行一次性查询,以便在站点启用之前将旧数据插入新数据库,所以没有问题。这个答案和上面所有的最后一个答案没有什么不同,但是你选择了这个?为什么?使用最后一个插入id()。在正常操作中,它没有问题。他正在询问一种读取和使用当前查询中插入的行的ID的方法<代码>插入到表值中(LAST_INSERT_ID())
不起作用。如果其他人在执行第二个查询之前插入一行,这是否仍然有效?我不想意外地按照我的意图更新行…不,不应该。但是,当脚本的两个部分都从同一个文件执行时,出现另一个查询的可能性很小。然而,在高流量系统上,我建议在更新时将其设置为离线,或者如果您正在使用inno DB,那么至少要将其锁定。我需要它是出于不同的目的,尽管我意识到我的代码逻辑有点自相矛盾,我选择了不同(可能更好)的方法。
mysql_query("INSERT INTO wp_posts(
            ID,
            post_author,
            post_date,
            post_date_gmt,
            post_content,
            post_title,
            post_excerpt,
            post_status,
            comment_status,
            ping_status,
            post_password,
            post_name,
            to_ping,
            pinged,
            post_modified,
            post_modified_gmt,
            post_content_filtered,
            post_parent,
            guid,
            menu_order,
            post_type,
            post_mime_type,
            comment_count
            ) VALUES (
            'null',
            '1',
            '$timestmp',
            '$timestmp',
            '$content',
            '$posttitle',
            '',
            'publish',
            'open',
            'open',
            '',
            '$postname',
            '',
            '',
            '$timestmp',
            '$timestmp',
            '',
            '0',
            '$uiai',
            '0',
            'post',
            '',
            '0'
            )") or die(mysql_error()); 
$uid = mysql_insert_id();
$uiai = 'http://yoursite.net/wordpress/?post_type=post&#038;p='.$uid;
mysql_query("UPDATE wp_posts SET guid = '$uiai' WHERE ID = '$uid'");