我正在处理注册用户表单,并且在 mysql 中有两个表。我想要做的是当新用户注册时,获取该用户的 id(哪个主键)并将其插入另一个表中。最好的方法是什么?
提前致谢。
为此,您需要使用 mysql_insert_id。这是一个例子:
<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db('mydb');
mysql_query("INSERT INTO mytable (product) values ('kossu')");
printf("Last inserted record has id %d\n", mysql_insert_id());
?>
首先将用户详细信息插入用户表并使用mysql_insert_id
. 并使用该用户 ID 插入另一个表。
在 PHP 上获取它
在此处获取最后插入 ID
但是,如果您打算使用 MYSQL 查询来获取它
使用存储过程将最后一个插入 ID 存储到变量中,然后生成第二个查询
INSERT INTO T1 (col1,col2) VALUES (val1,val2);
SET @last_id_in_T1 = LAST_INSERT_ID();
INSERT INTO T2 (col1,col2) VALUES (@last_id_in_T1,val2);
或在第一次插入后直接插入
INSERT INTO T1 (col1,col2) VALUES (val1,val2);
INSERT INTO T2 (col1,col2) VALUES (LAST_INSERT_ID(),val2);
在数据库级别使用触发 Mysql。例如,我有两个表:
user(id int primary key, nombre varchar(50));
replication(id_r int primary key, nombre_r varchar(50));
使用触发器:
create trigger user_r after insert on user
for each row
insert into replication(id_r, nombre_r)
select u.id, u.nombre
from user u
where u.id=NEW.id and u.nombre=NEW.nombre;
使用任何事务查询进行写入:
以下是 CI 模式:
$this->db->trans_start();
$this->db->query('AN SQL QUERY...');
$this->db->query('AN SQL QUERY...');
if(!$this->db->trans_complete()){
$this->db->trans_rollback();
}
$query1= "INSERT INTO employee ( username, email,...)
VALUES ('".$_POST["username"]."', ...)";
if($result1 = mysql_query($query1))
{
$emp_id = mysql_insert_id(); // last created id by above query
$query2= "INSERT INTO dept ( emp_id, dept_name, ...)
VALUES ('".$emp_id."', '".$_POST["dept_name"]."',...)";
if($result2 = mysql_query($query2))
{
//success msg
}
}