【问题标题】:Insert into 2 tables with PDO MySQL [duplicate]使用 PDO MySQL 插入 2 个表 [重复]
【发布时间】:2012-12-27 18:10:12
【问题描述】:

可能重复:
MySQL Insert into multiple tables? (Database normalization?)

我尝试使用 PDO 将我的记录插入 2 个表中,我有以下内容

try {
  // Connect and create the PDO object
 $conn = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
$conn->exec("SET CHARACTER SET utf8");      // Sets encoding UTF-8
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

 $sql = "INSERT INTO `directory` (`First_Name`,`Surname`,`Nicknames`) 
      VALUES (:firstname, :surname, :nicknames) ";

 $statement = $conn->prepare($sql);
 $statement->bindValue(":firstname", $firstname);
 $statement->bindValue(":surname", $surname);
 $statement->bindValue(":nicknames", $nicknames);


 $count = $statement->execute();

  $conn = null;        // Disconnect
}
catch(PDOException $e) {
  echo $e->getMessage();
}

如果我使用(我认为是正确的)将我的数据插入到 1 个表中,但是我的页面没有呈现并且没有源代码输出?谁能看看我哪里出错了?

try {
  // Connect and create the PDO object
 $conn = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
$conn->exec("SET CHARACTER SET utf8");      // Sets encoding UTF-8
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

 $sql = "INSERT INTO `directory`, `nicknames`  (`First_Name`,`Surname`,`Nicknames`) 
      VALUES (:firstname, :surname, :nicknames) ";

 $statement = $conn->prepare($sql);
 $statement->bindValue(":firstname", $firstname);
 $statement->bindValue(":surname", $surname);
 $statement->bindValue(":nicknames", $nicknames);


 $count = $statement->execute();

  $conn = null;        // Disconnect
}
catch(PDOException $e) {
  echo $e->getMessage();
}

【问题讨论】:

  • 如果插入完全相同的数据,则不需要两个表。看起来你在另一个层面上做错了。

标签: php mysql pdo


【解决方案1】:

据我所知,您不能使用一个 mySQL 查询插入 2 个表。相反,您应该使用两个不同的查询。

附录 在我职业生涯的很久以后再看这个答案,我有两个补充:

  1. 您可能可以使用子查询进行两次插入,但您不应该这样做。您应该使用单独的查询和事务。事务很重要,应该让更多的开发者使用它们。

  2. 看看 OP 试图完成什么,这可能是一个最好在存储过程中完成的操作。

【讨论】:

    【解决方案2】:

    那不是有效的 SQL;你需要分开做。也许:

    $sql = "
        INSERT INTO `directory`(`First_Name`,`Surname`,`Nicknames`) VALUES (:firstname, :surname, :nicknames);
        INSERT INTO `nicknames`(`First_Name`,`Surname`,`Nicknames`) VALUES (:firstname, :surname, :nicknames);
    ";
    

    【讨论】:

    • 啊,我明白了,谢谢@minitech,我试试看
    • 同意,或者使用事务同时处理它们......尽管它实际上是在做同样的事情。
    • 成功了!但是我有一个小问题,当插入到我的第一个表中时,使用 auto_inc 生成了一个 User_ID,我如何获取这个 ID 并将其放入第二个插入查询中?
    • @Liam:那么你必须将它们作为单独的查询进行,然后插入PDO::lastInsertId
    【解决方案3】:

    问题出在 SQL 上,我不认为它是有效的语法。我认为在这种情况下您需要进行交易。

    【讨论】:

      猜你喜欢
      • 2013-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-07
      • 2015-06-09
      • 2017-02-10
      相关资源
      最近更新 更多