好的,不知道这在实践中是否简单,因为它在理论上但我想知道。
我在该查询中有一个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()
在查询之前,但是我已尽力而为但是没有任何内容可以按照我的要求出来。帮助我如何实现这个
答案 0 :(得分:1)
从我的知识来看,这是不可能的。由于没有运行任何查询,MySQL无法返回所述查询的ID。
$db->lastInsertId();
。预先运行查询并将其存储为变量;
SELECT auto_increment
FROM INFORMATION_SCHEMA.TABLES WHERE table_name =' tablename'
我强烈推荐选项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';
应该这样做。有关以下链接的更多信息:
答案 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)");
这恰好做了魔术!!!
`