在插入期间访问mysql插入的ID

时间:2011-01-30 20:34:33

标签: php mysql

有没有办法访问自动增量的id以便在查询中使用。

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

或许我可以通过一些快速的方式找出当前的AI计数器是什么,所以我知道进入的是什么?

我需要这个,因为我试图将WP po​​sts表回填到我正在使用的新自定义帖子类型中,并且我需要将插入的id放入GUID列中。

7 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

我假设你想要一些与用户ID具有相同值的列。 但你为什么要那样做?只需使用用户ID,即使您将其用作参考ID。

答案 2 :(得分:0)

AFAIK,您无法访问正在插入的行的auto_increment值。我建议插入行,然后读取它的ID并更新它以填充你需要知道ID的字段。

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

答案 3 :(得分:0)

这是一种做法。这对我有用:

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

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

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

您应该在网站脱机时执行此操作或首先锁定表格,以便在其他地方之间不会出现其他查询请求。

示例:第一次查询(抱歉列格式化,但更容易调试):

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&p='.$uid;
mysql_query("UPDATE wp_posts SET guid = '$uiai' WHERE ID = '$uid'");

...另外,当你循环遍历许多插入时,有时它可以最大化PHP脚本允许的最大执行时间,并且上传被中断。它有助于使用set_time_limit(0);整个脚本,所以最大允许时间计数器定期重置。

...希望这会有所帮助:)

答案 4 :(得分:0)

也许您可以在AUTO_INCREMENT查询中使用information_schema.tables中表格的INSERT ... SELECT值。理论上INSERT ... SELECT应该锁定information_schema.tablesAUTO_INCREMENT值应该是用于下一个INSERT的ID。但是你几乎不应该测试它并考虑性能问题。

答案 5 :(得分:-1)

use mysql_insert_id() to get last inserted id

您可以在以下网址查看更多信息: http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html

答案 6 :(得分:-3)

我最终只是拔出了最后一个id:

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