PHPからやるとno database selected…?
今月の後片付けPart1としてPHPプログラムの作成をしているのだけど、
ログに出力したSQLをコンソールで実行すると結果を取ってくるのに
プログラムを走らせるとno database selectedでエラーになるという現象
にぶつかっている。
PHP5ならPDO使えとかあると思うんだけど勉強不足なのでPEAR::DBでやっている
のだが、executeEmulateQuery()で出力してるから実行時SQLと同じはずなんだけどな…
少なくとも半年前と同じやり方していてこんなエラーにぶち当たったのは初めてだ。
今日中に終わらせるつもりだったんだが…うーんこまった。
追記。同じやり方じゃなかった。前回もそれで引っかかったいたようだ。
対処としてSQL実行用メソッドを作ってそこでDB接続〜実行〜切断の流れを
書いていた。汎用メソッドになるのでどの処理で実行されたかをわからせる
ためにこんなパラメータにしておいた。
/** 汎用SQL実行メソッド。実行結果を返却する。
* @param $method 呼び出し元メソッド名(ログ出力で使用)
* @param $sql 実行SQL文(prepared statement)
* @param $variable バインド変数配列
* @return $result 実行結果。取得データ, DB_OKなど
*/
public function executeSQL($method, $sql, $variable){
$this->dbConn = DB::connect(CONNECT);
if(PEAR::isError($this->dbConn)){
$logMsg = $method."failed to connect db. detail:\n".$this->dbConn->getMessage();
Logging::outLog($logMsg, ERROR);
die($logMsg);
}
$statement = $this->dbConn->prepare($sql);
$sqlMsg = $method."->Execute SQL: ".$this->dbConn->executeEmulateQuery($statement, $variable);
Logging::outLog($sqlMsg, INFO);
$result = $this->dbConn->execute($statement, $variable);
if(PEAR::isError($result)){
$msg = $method.": failed to execute SQL.\n";
$msg = $msg.$result->getMessage();
Logging::outLog($msg, ERROR);
die($msg);
}
$this->dbConn->disconnect();
return $result;
}
これが絶対いいってわけでもないんだろうけど一応メモがてら。