在单个查询中使用mysql_insert_id

时间:2015-05-30 20:26:43

标签: php mysql mysqli

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

我在该查询中有一个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()在查询之前,但是我已尽力而为但是没有任何内容可以按照我的要求出来。帮助我如何实现这个

4 个答案:

答案 0 :(得分:1)

从我的知识来看,这是不可能的。由于没有运行任何查询,MySQL无法返回所述查询的ID。

  1. 您可以使用经典方法,提取前一条记录的ID并为其添加1,这不是一个很好的解决方案,就像删除记录一样,自动增量值和最后一个值+1可能不同。 / LI>
  2. 运行多个查询然后使用insert_id(MySQLi与您使用的不同,您最好使用评论中提到的$db->lastInsertId();
  3. 预先运行查询并将其存储为变量;

    SELECT auto_increment FROM INFORMATION_SCHEMA.TABLES WHERE table_name =' tablename'

  4. 我强烈推荐选项2,它只是您想要实现的最干净,最可靠的方法。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

$ 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

N.B。 更新查询$ sql中的主键名称

编辑:

假设查询的弱点和我做的快速研究。

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

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

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

Stackoverflow : get auto-inc value

答案 3 :(得分:0)

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

`

//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)");

这恰好做了魔术!!!

`