【问题标题】:How to insert the id from 1 table to another at the same time?如何同时将 1 个表中的 id 插入到另一个表中?
【发布时间】:2015-11-03 02:59:01
【问题描述】:

我有两个表登录和用户。在表登录中我有 user_id(主键),用户名(varchar),密码(varchar)和表用户 id(主键),用户名(varchar),user_id(int)..我想要发生的是当我在表登录中插入一条记录 user_id 也应该插入表用户的 user_id 中。请帮助我。

这是我的插入代码

public function create($username,$password,$province)
{
try
{
  $stmt = $this->db->prepare("INSERT INTO login(username,password,province) VALUES(:username, :password, :province)");
  $stmt->bindparam(":username",$username);
  $stmt->bindparam(":password",$password);
  $stmt->bindparam(":province",$province);
  $stmt->execute();

$stmt = $this->db->prepare("INSERT INTO sample(username) VALUES (:username)");

 $stmt->bindparam(":username",$username);
 $stmt->execute();
 return true;
}
catch(PDOException $e)
{
  echo $e->getMessage();  
  return false;
}
}

到目前为止,我所做的是同时向表中插入一条记录..但我有点苦恼如何将表登录中的 user_id 插入表用户中的 user_id..

【问题讨论】:

  • @Fred-ii- 很抱歉粘贴不好
  • 你的表是loginsample;所以user_id from table login to user_id in table users 没有意义。 user_id 是否在 login 中自动递增?如果是这样,可以从这里开始,php.net/manual/en/pdo.lastinsertid.php
  • 是的。登录表中的user_id是自增的
  • sampleusers?使用lastinsertid。我不知道您为什么需要sampleusers 表,但似乎所有数据都已经在login..
  • 示例表中的 user_id 设置为整数。我想要的是,当我在登录表中插入记录时,登录中的 user_id 也应该插入到示例表中的 user_id 中

标签: php mysql pdo


【解决方案1】:

你还没有定义$user_id

像这样修改函数

public function create($username,$password,$province)
{
try
{
  $stmt = $this->db->prepare("INSERT INTO login(username,password,province) VALUES(:username, :password, :province)");
  $stmt->bindparam(":username",$username);
  $stmt->bindparam(":password",$password);
  $stmt->bindparam(":province",$province);
  $stmt->execute();
   // make changes here create $user_id
$user_id =  $this->db->insert_id;
$stmt = $this->db->prepare("INSERT INTO sample(username,user_id) VALUES (:username, :user_id)");
    // make changes here in user_id instead of user_i
 $stmt->bindparam(":user_id",$user_id);

 $stmt->bindparam(":username",$username);
 $stmt->execute();
 return true;
}
catch(PDOException $e)
{
  echo $e->getMessage();  
  return false;
}
}

【讨论】:

  • 顺便问一下insert_id是什么?
  • @MeeneshJain $stmt->insert_id; 是一个 mysqli 方法。 OP 正在使用 PDO,所以它应该是 $this->db->lastInsertId();
  • @sean 那么我需要做什么?
  • 你试过用$user_id = $this->db->lastInsertId();代替这张海报的$user_id = $stmt->insert_id;吗?
  • 是的..我已经替换了该行..但仍然无法正常工作..当我尝试删除示例表中的 user_id 并尝试在两个表上插入记录而不是 user_id
【解决方案2】:

你可以像创建数据库触发器

Create or replace trigger <trigger_name> after insert login ...

在插入第一个表时,您可以在另一个具有相同 ID 的表中插入记录。您可以按指定创建触发器 Here

【讨论】:

【解决方案3】:

你应该可以使用PDO::lastInsertId -> $this-&gt;db-&gt;lastInsertId();

public function create($username,$password,$province)
{
try
{
  $stmt = $this->db->prepare("INSERT INTO login(username,password,province) VALUES(:username, :password, :province)");
  $stmt->bindparam(":username",$username);
  $stmt->bindparam(":password",$password);
  $stmt->bindparam(":province",$province);
  $stmt->execute();

  $user_id = $this->db->lastInsertId(); 

  $stmt = $this->db->prepare("INSERT INTO sample(username,user_id) VALUES (:username, :user_id)");
  $stmt->bindparam(":user_id",$user_id);
  $stmt->bindparam(":username",$username);
  $stmt->execute();
  return true;
}
catch(PDOException $e)
{
  echo $e->getMessage();  
  return false;
}
}

或者,您可以执行 INSERT ... SELECT ... 查询, 看起来像 -

INSERT INTO sample(username,user_id) SELECT :username, user_id FROM login WHERE username = :username1

所以你的函数看起来像 -

public function create($username,$password,$province)
{
try
{
  $stmt = $this->db->prepare("INSERT INTO login(username,password,province) VALUES(:username, :password, :province)");
  $stmt->bindparam(":username",$username);
  $stmt->bindparam(":password",$password);
  $stmt->bindparam(":province",$province);
  $stmt->execute();

  $stmt = $this->db->prepare("INSERT INTO sample(username,user_id) SELECT  :username, user_id FROM login WHERE username = :username1");
  $stmt->bindparam(":username",$username);
  $stmt->bindparam(":username1",$username);
  $stmt->execute();
  return true;
}
catch(PDOException $e)
{
  echo $e->getMessage();  
  return false;
}
}

【讨论】:

    猜你喜欢
    • 2020-06-01
    • 2021-11-17
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多