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

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

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

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

2849閲覧

PHPファイルでDBを開き、開いたDB上で外部の.sqlファイルを実行したいです。

y_programming

総合スコア48

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2020/03/29 11:49

PHPファイルの中でDBに接続し、その接続した状態でSQLを実行してレコードを追加したり削除したり操作したいです。

PHP

1$con = pg_connect("dbname=db0000 user=nobody"); 2if(!$con){ 3 return_error("DBへの接続失敗です。"); 4}

↑のpg_connect()を使って、postgerSQLで予め作ったデータべース「db0000」に接続することができました。

その状態でSQL文を実行すれば、
db0000上でレコードを追加したり削除したり色々操作できると考えました。
そのSQLは外部に.sqlで作ってあるので、phpファイルに読み込んで実行したいです。

SQL

1create table table1( 2 name text, 3 room text, 4 score text 5); 6GRANT ALL ON table1 TO nobody; 7INSERT INTO table1 (name,room,score) VALUES('相田みつを','1','100');

↑このように作られた.sqlファイルが別途あります。
試しにinclude()を使って、相対パスで読み込んでみたところ、
ソースの内容がそのままブラウザ上に表示されたので、
とりあえずdb0000に接続しながらのパス指定には成功しました。
次はphpファイルにSQLとして扱えるように読み込みたいという状況です。
どのような手順を踏んだらよろしいでしょうか。
「php sql 読み込み」などで検索はしてみたのですが、解決することができませんでした。

よろしくお願いいたします。

環境
・postgreSQL 9.4.26
・PHP 5.3.3
・virtualBox6.1.4 r136177(Qt5.6.2)
・CentOS-6.8-x86_64-minimal.iso

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

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

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

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

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

guest

回答2

0

ベストアンサー

includeではPHPのソースコードとして読み込まれるのでfile_get_contents()などであくまで文字列情報として読み込むべきと思います。
PHPからするとSQLもそういう文字列の集合体です。

※ただし、きちんとトランザクション→コミットorロールバックは入れてください。

投稿2020/03/29 12:01

m.ts10806

総合スコア80850

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

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

y_programming

2020/03/29 12:02

今からfile_get_contents()を試してみます、ありがとうございます
m.ts10806

2020/03/29 12:05

INSERTのデータを動的にしたいとかなると結構面倒なので SQLファイルに持たずにコードに直接書いてpg_connect()ではなくPDOで処理された方がコードとしてはやりやすいと思います。
y_programming

2020/03/29 12:14

PDOを検索してみましたが、データベースの種類を問わないようなので便利そうです。 今回は訳あって外部ディレクトリの中のsqlファイルを引っ張ってくる形ですが、 PDOも押さえておきたいと思います
y_programming

2020/03/29 13:10

質問とは直接関係のないバグが出ていましたが直りました。 結果、期待した通り外部の.sqlファイルの中に記載されたSQL文を接続DBに飛ばす事ができました。 ありがとうございます! include()との違いが少し理解出来ました。 トランザクション~のくだりがよくわかっていないのでそちらも調べてみようと思います。
guest

0

test.sqlファイルを読み込んで実行するです。

php

1 // SQL文を実行 2 $query = file_get_contents('test.sql'); 3 pg_query($conn, $query);

投稿2020/03/29 12:11

amura

総合スコア333

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

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

y_programming

2020/03/29 13:02

$queryにSQL文を溜め込んでおき、pg_query()を使って$connの中の接続DBに飛ばす感じでしょうか、 ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問