繁体   English   中英

在单个查询中使用mysql_insert_id

[英]Use mysql_insert_id in single query

好的,不知道从理论上讲这在实践中是否简单,但我想知道。

我在该查询中只有一个INSERT查询,我想提取AUTO_INCREMENT值,然后在同一查询中重用它。

例如

//values to be inserted in database table
$a_name = $mysqli->real_escape_string($_POST['a_name']);
$details = $mysqli->real_escape_string($_POST['details']);
$display_type = $mysqli->real_escape_string($_POST['display_type']);
$getId = mysqli_insert_id();

//MySqli Insert Query
$insert_row = $mysqli->query("INSERT INTO articles (a_name,details,display_type,date_posted) VALUES('$a_name','$details','$display_type$getId',CURRENT_TIMESTAMP)");

显然,正在获取一个blank value (我知道,因为mysqli_insert_id()在查询之前,但是我已经尽力了,但没有任何结果。我可以帮我一些忙吗?

据我所知,这是不可能做到的。 由于尚未运行查询,因此MySQL无法返回该查询的ID。

  1. 您可以使用经典方法,将前一个记录的ID加上1,这不是一个好方法,因为删除一条记录,自动增量值和最后一个值+1可能不同。
  2. 运行多个查询,然后使用insert_id(MySQLi与您所使用的不同,最好使用$db->lastInsertId();如注释中所述。
  3. 事先运行查询并将其存储为变量;

    在INFORMATION_SCHEMA.TABLES中的table_name ='tablename'中选择auto_increment

我强烈建议选择2,它只是您想要实现的最干净,最可靠的方法。

我不认为这可以做到。 您必须先在两个单独的查询中插入行,然后更新display_type。

$ display_type所需的值似乎是:$ display_type +(max(id)+1)。

为了获得max_id,您必须在执行以下查询之前:

$sql = "SELECT id FROM articles ORDER BY id DESC LIMIT 1";
$result = mysqli->query($sql);
$maxid = $result->fetch_array(MYSQLI_NUM);

// $maxid[0] will contains the value desired

// Remove the mysqli_insert_id() call - Swap $getid by ($maxid[0] + 1)
// and u're good to go

注意,在查询$ sql中更新您主键名称

编辑:

假设查询的弱点和快速的搜索功能,我做到了。

尝试将$ sql替换为(不要忘记更新 DatabaseName和TableName值):

$sql = SELECT `AUTO_INCREMENT`
       FROM  INFORMATION_SCHEMA.TABLES
       WHERE TABLE_SCHEMA = 'DatabaseName'
       AND   TABLE_NAME   = 'TableName';

那应该做。 有关以下链接的更多信息:

Stackoverflow:获取自动增量值

谢谢大家的意见,不要复制,粘贴,编辑和修复; 这是最终的工作代码(解决方案)

`

//values to be inserted in database table
$a_name = $mysqli->real_escape_string($_POST['a_name']);
$details = $mysqli->real_escape_string($_POST['details']);
$display_type = $mysqli->real_escape_string($_POST['display_type']);

//Select AUTO_INCREMENT VALUE
$sql = "SELECT `AUTO_INCREMENT`
       FROM  INFORMATION_SCHEMA.TABLES
       WHERE TABLE_SCHEMA = 'chisel_bk'
       AND   TABLE_NAME   = 'articles'";

$result = $mysqli->query($sql);
$maxid = $result->fetch_array(MYSQLI_NUM);
$getId = $maxid[0];

//MySqli Insert Query
$insert_row = $mysqli->query("INSERT INTO articles (a_name,details,display_type,date_posted) VALUES('$a_name','$details','$display_type$getId',CURRENT_TIMESTAMP)");

这恰好是魔术!!!

`

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM