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;         

    }

これが絶対いいってわけでもないんだろうけど一応メモがてら。


  generated by feedpath Rabbit