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

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

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

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

PHP

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

Q&A

解決済

2回答

5802閲覧

別ファイルに格納している複数のSQL文を一度に処理したい

okame

総合スコア54

SQL

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

PHP

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

0グッド

0クリップ

投稿2015/08/11 02:04

編集2015/08/11 02:07

たとえば実行ファイルとは別のファイルに...
// ------------------------------------------------------------------------------------------------------------------

<?php class test_20150811100000 { public $description = 'テストです'; public function up() { return ' ALTER TABLE test ADD COLUMN test7 VARCHAR(20); ALTER TABLE test ADD COLUMN test8 VARCHAR(20); '; } } ------------------------------------------------------------------------------------------------------------------ // のような形でSQL文を格納しておきます。 そして実行ファイルでクラスをインスタンスして upメソッド内のSQL文を取得してSQLを実行させます。 その際に現状は... // ------------------------------------------------------------------------------------------------------------------ require_once('./dir/上記ファイル'); $upInstance = new test_20150811100000; $upGetSql = $upInstance->up(); $upSqlAll = explode(';', $upGetSql); foreach ($upSqlAll as $query) { $trimSql = ''; $trimSql = trim($query); if ($trimSql != '') { $executeSql = ''; $executeSql = $trimSql; $stmt = ''; $stmt = $this->dbh->prepare($executeSql); $stmt->execute(); } } ------------------------------------------------------------------------------------------------------------------ // のような形でexplode関数を使ってセミコロンでSQL文で分割してから 一つずつSQLを実行するようにしています。 これをexplodeで分割しないで一度に複数のSQLを実行させたい場合、 上記と同じ形で$stmt->execute()で実行すると以下のエラー、 「SQLSTATE[42601]: Syntax error: 7 ERROR: 準備された文に複数のコマンドを挿入できません」 と返ってきます。 こういった場合はSQL実行時にどのメソッドを使えばよいのでしょうか? 実行環境は、PHP5.3.3、データベースはPostgreSQL9.2.13です。 お手数ですがご教示いただければ幸いです。

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

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

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

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

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

guest

回答2

0

自己解決

prepareメソッド使わずにPDO::execを使う。

// ----------------------------------------------------------------------------------------------
require_once('./dir/上記ファイル');
$upInstance = new test_20150811100000;
$this->dbh->exec($queries);
---------------------------------------------------------------------------------------------- //

投稿2015/08/29 08:56

okame

総合スコア54

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

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

0

プリペアドステートメントでマルチステートメントは使えないようなので、PDO::query を使ってみるといかがでしょうか?

投稿2015/08/11 02:29

ngyuki

総合スコア4514

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

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

okame

2015/08/11 04:42

ご回答ありがとうございます! PDO::queryだと同じエラーになってしまいました。 ので、現状はprepareメソッド使わずにPDO::execで試したら うまくいったのですが、果たしてこれでよいのでしょうか? // ---------------------------------------------------------------------------------------------- require_once('./dir/上記ファイル'); $upInstance = new test_20150811100000; $this->dbh->exec($queries); ---------------------------------------------------------------------------------------------- //
ngyuki

2015/08/11 04:50

PDO::query は内部で prepare/execute されているということでしょうかね、PDO::exec でうまくいくのならそれでいいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問