如何在创建主要ID之前或同时获取主要ID?

时间:2011-08-25 14:47:45

标签: php mysql primary-key

我在做什么:( wp_posts将ID作为主键并自动增加)

mysql_query("INSERT INTO wp_posts (post_content, post_title) VALUES ('$addEP', '$title')");
$rs = mysql_query("SELECT ID FROM wp_posts WHERE post_title='$title'");
$add_row = mysql_fetch_array($rs);
$add_postid = $add_row['ID'];
mysql_query("INSERT INTO wp_term_relationships (object_id, term_taxonomy_id) VALUES ('$add_postid', '$cat_id')");

所以基本上,我在做的是;我将内容插入到wp_posts中,然后运行另一个查询以捕获帖子的ID。然后将其设置为另一个表。

是否可以在不运行第二个查询来捕获ID的情况下执行此操作? 感谢。

6 个答案:

答案 0 :(得分:3)

您可以通过mysql_insert_id()

检索上次生成的ID(每个连接)

编辑:MySQL服务器还存储每个连接的id,你可以"retrieve" the id within an sql statement

INSERT INTO
  wp_term_relationships
  (object_id, term_taxonomy_id)
VALUES
  (LAST_INSERT_ID(), '$cat_id')

http://dev.mysql.com/doc/refman/5.0/en/mysql-insert-id.html

解释了两种“方法”之间的细微差别

答案 1 :(得分:1)

$add_postid = mysql_insert_id();正是您要找的。

所以

$rs = ... // and
$add_row = ...

......不再需要了。

答案 2 :(得分:1)

这是mysql_last_insert_id()的用途

答案 3 :(得分:1)

mysql_insert_id()将为您返回值,但仅在插入完成后。您不能在插入中使用它来捕获新ID,因为尚未分配该ID。

在内部正在进行select last_insert_id();

答案 4 :(得分:1)

如果不手动传递帖子的ID,则必须使用mysql_insert_id()

  

注意:

     

因为mysql_insert_id()作用于上次执行的查询,所以一定要确保   在生成的查询之后立即调用mysql_insert_id()   值。

另外,如果您还没有,我建议您查看PDO

答案 5 :(得分:1)

不是我知道的(你必须先插入才能获得正确的ID)...脚本在哪里运行? Wordpress有一个内置类,可能会更容易,它有一个存储插入ID的变量:

http://codex.wordpress.org/Class_Reference/wpdb#Class_Variables