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