質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

0回答

301閲覧

PDOでSQLite3のデータベースを結合させたい

huk66361

総合スコア8

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2018/09/20 12:35

実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/09/21 08:55

「結合」というのはJOINのことを言っているのですか?それともコードの重複部分を簡略化してコードの見通しをよくしたいということですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問