使用PDO MySQL [复制到2个表中]

问题描述 投票:3回答:3

可能重复: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
3个回答
8
投票

这不是有效的SQL;您需要单独进行操作。也许:

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

1
投票

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

附录在我职业生涯的后期,仔细研究这个答案,我有两个补充:

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

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.