可能重复: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();
}
这不是有效的SQL;您需要单独进行操作。也许:
$sql = "
INSERT INTO `directory`(`First_Name`,`Surname`,`Nicknames`) VALUES (:firstname, :surname, :nicknames);
INSERT INTO `nicknames`(`First_Name`,`Surname`,`Nicknames`) VALUES (:firstname, :surname, :nicknames);
";
据我所知,您无法通过一个mySQL查询插入2个表中。相反,您应该使用两个不同的查询。
附录在我职业生涯的后期,仔细研究这个答案,我有两个补充:
您可能可以对子查询进行两次插入,但不应这样做。您应该使用单独的查询和事务。交易很重要,更多的开发人员应该使用它们。
查看OP试图完成的操作,这可能是最好在存储过程中完成的操作。
问题出在SQL上,我不认为这是有效的语法。在这种情况下,我认为您需要进行交易。