[英]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。
$db->lastInsertId();
如注释中所述。 事先运行查询并将其存储为变量;
在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';
那应该做。 有关以下链接的更多信息:
谢谢大家的意见,不要复制,粘贴,编辑和修复; 这是最终的工作代码(解决方案)
`
//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.