Php 如何插入一行';是否将主键插入到它的另一列?
我发现自己经常这样做:Php 如何插入一行';是否将主键插入到它的另一列?,php,mysql,sql,Php,Mysql,Sql,我发现自己经常这样做: mysql_query("INSERT INTO employees (name, age) VALUES ('$name', '$age')"); $id = mysql_insert_id(); mysql_query("UPDATE employees SET pID = $id WHERE id = '$id'"); 这只是一个例子,但我经常需要将新插入的行的ID包含到它的另一列中,我被迫使用这个麻烦的解决方案。还有其他方法吗?因为您事先不知道插入id是什么,所
mysql_query("INSERT INTO employees (name, age) VALUES ('$name', '$age')");
$id = mysql_insert_id();
mysql_query("UPDATE employees SET pID = $id WHERE id = '$id'");
这只是一个例子,但我经常需要将新插入的行的ID包含到它的另一列中,我被迫使用这个麻烦的解决方案。还有其他方法吗?因为您事先不知道插入id是什么,所以没有其他方法可以做到这一点(除了获取最大id并在插入查询中使用它,但这仍然是另一个查询)。但是,为什么你需要做“很多”呢?创建一个能为您实现这一点的函数
更好的问题是:为什么需要将ID放在同一个表的两列中?因为您事先不知道插入ID是什么,所以没有其他方法可以做到这一点(除了获取最大ID并在插入查询中使用它,但这仍然是另一个查询)。但是,为什么你需要做“很多”呢?创建一个能为您实现这一点的函数
更好的问题是:为什么需要将ID放在同一个表的两列中?检查MySQL的
LAST\u INSERT\u ID()
函数。根据您的情况,可能需要也可能不需要。检查MySQL的LAST\u INSERT\u ID()
函数。根据您的情况,可能需要也可能不需要。
如果使用存储过程,则可以通过从php到mysql的一次调用来完成: 示例调用
call insert_employee('f00',32);
call insert_employee('bar',64);
$sql = sprintf("call insert_employee('%s',%d)", $name, $age);
脚本
drop table if exists employees;
create table employees
(
id int unsigned not null auto_increment primary key,
name varchar(32) not null,
age tinyint unsigned not null default 0,
pid int unsigned not null default 0
)
engine=innodb;
drop procedure if exists insert_employee;
delimiter #
create procedure insert_employee
(
in p_name varchar(32),
in p_age tinyint unsigned
)
begin
declare v_id int unsigned default 0;
insert into employees(name, age) values (p_name, p_age);
set v_id = last_insert_id();
update employees set pid = v_id where id = v_id;
end#
delimiter ;
如果使用存储过程,则可以通过从php到mysql的一次调用来完成: 示例调用
call insert_employee('f00',32);
call insert_employee('bar',64);
$sql = sprintf("call insert_employee('%s',%d)", $name, $age);
脚本
drop table if exists employees;
create table employees
(
id int unsigned not null auto_increment primary key,
name varchar(32) not null,
age tinyint unsigned not null default 0,
pid int unsigned not null default 0
)
engine=innodb;
drop procedure if exists insert_employee;
delimiter #
create procedure insert_employee
(
in p_name varchar(32),
in p_age tinyint unsigned
)
begin
declare v_id int unsigned default 0;
insert into employees(name, age) values (p_name, p_age);
set v_id = last_insert_id();
update employees set pid = v_id where id = v_id;
end#
delimiter ;
@约翰·史密斯-有不同的继承人数据模型-您选择的模型可能很难使用
看一看约翰·史密斯(John Smith)——他的档案数据有不同的模型——你选择的模型可能很难处理
看看你问题的答案:但是通过这个更新查询,你将相同的值存储在两个不同的列中,那么你的意思是员工是自己的父母吗?无论如何,这不是问题的主题。很抱歉,这里选择存储过程作为解决方案回答您的问题:但是,使用该更新查询,您将相同的值存储到两个不同的列中,这样您的意思是员工是自己的家长?无论如何,这不是问题的主题。很抱歉,这里选择的解决方案是存储过程。我非常感兴趣的是下行投票者的意见。我非常感兴趣的是下行投票者的意见。