実現したいこと
PHP を使って SQLite3 のデータベースを結合させたいです。
発生している問題
次のようなコードを実行すると、あるはずの sub.users
が見つからないというエラーが発生しています。
php
1$pdo = new PDO("sqlite:" . __DIR__ . DIRECTORY_SEPARATOR . "users1.sqlite"); 2$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 3$pdo_statement = $pdo->prepare("ATTACH DATABASE :file AS sub"); 4$pdo_statement->bindValue(":file", __DIR__ . DIRECTORY_SEPARATOR . "users2.sqlite"); 5$pdo_statement->execute(); 6 7$pdo->exec(" 8 INSERT INTO 9 main.users 10 ( 11 id, 12 name 13 ) 14 SELECT 15 id, 16 name 17 FROM 18 sub.users; 19");
PDOException: SQLSTATE(HY000): General error: 1 no such users: sub.users
試したこと
複数の PDO インスタンスを使用することでやりたいことは実現できました。
ただ、コードの見通しが悪くなるのでデータベースを結合して使用できると助かります。
php
1$pdo1 = new PDO("sqlite:" . __DIR__ . DIRECTORY_SEPARATOR . "users1.sqlite"); 2$pdo1->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 3$pdo_statement1 = $pdo1->prepare(" 4 INSERT INTO 5 users 6 ( 7 id, 8 name 9 ) 10 VALUES 11 ( 12 :id, 13 :name 14 ); 15"); 16$pdo_statement1->bindParam(":id", $id); 17$pdo_statement1->bindParam(":name", $name); 18 19$pdo2 = new PDO("sqlite:" . __DIR__ . DIRECTORY_SEPARATOR . "users2.sqlite"); 20$pdo2->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_BOUND); 21$pdo2->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 22$pdo_statement2 = $pdo2->prepare(" 23 SELECT 24 id, 25 name 26 FROM 27 users; 28"); 29$pdo_statement2->bindColumn("id", $id); 30$pdo_statement2->bindColumn("name", $name); 31$pdo_statement2->execute(); 32 33while ($pdo_statement2->fetch()) { 34 $pdo_statement1->execute(); 35}
補足
PHP v7.1.5
SQLite v3.15.1
あなたの回答
tips
プレビュー