3

重複の可能性:
MySQL 複数のテーブルに挿入しますか? (データベースの正規化?)

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();
}
4

3 に答える 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);
";
于 2012-12-27T18:12:57.957 に答える
1

私の知る限り、1 つの mySQL クエリで 2 つのテーブルに挿入することはできません。代わりに、2 つの異なるクエリを使用する必要があります。

補遺 この回答を私のキャリアのずっと後に見て、2つの追加があります。

  1. おそらくサブクエリで 2 つの挿入を行うことができますが、そうすべきではありません。別のクエリとトランザクションを使用する必要があります。トランザクションは重要です。より多くの開発者がトランザクションを使用する必要があります。

  2. OP が達成しようとしていたことを見ると、これはストアド プロシージャで実行するのが最適な操作である可能性があります。

于 2012-12-27T18:13:31.700 に答える
0

問題は SQL にあります。有効な構文だとは思いません。この場合、取引が必要だと思います。

于 2012-12-27T18:14:03.087 に答える