Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何插入一行';是否将主键插入到它的另一列?_Php_Mysql_Sql - Fatal编程技术网

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)——他的档案数据有不同的模型——你选择的模型可能很难处理


看看你问题的答案:

但是通过这个更新查询,你将相同的值存储在两个不同的列中,那么你的意思是员工是自己的父母吗?无论如何,这不是问题的主题。很抱歉,这里选择存储过程作为解决方案回答您的问题:但是,使用该更新查询,您将相同的值存储到两个不同的列中,这样您的意思是员工是自己的家长?无论如何,这不是问题的主题。很抱歉,这里选择的解决方案是存储过程。我非常感兴趣的是下行投票者的意见。我非常感兴趣的是下行投票者的意见。