たとえば実行ファイルとは別のファイルに...
// ------------------------------------------------------------------------------------------------------------------
<?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です。
お手数ですがご教示いただければ幸いです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。