こんにちは、PHP初心者です。
こんにちは、PHP初心者です。
Smartyを利用してWebサイトを構築中です。
Smarty.classの派生クラスを作成し、コンストラクタ内でDB接続オブジェクトをprivateプロパティ($_db)に設定しているのですが,query文のところでエラーSELECT * FROM books [nativecode=1046 ** No database selected]となります。ためしにコンストラクタ内でクエリを実行したところテーブルから値を取得できました。なぜコンストラクタ外に出るとエラーになるのかわかりません。どなたかご教示ください。どうぞよろしくお願いします。
下記ソースです。
=====派生クラス=======================
<?php
$user = "dbuser";
$pass = "dbpassword";
$name = "mobilephp";
$host = "localhost";
require_once("DB.php");
require_once("Smarty/libs/Smarty.class.php");
class MySmarty extends Smarty {
private $_db;
public function __construct() {
$this->Smarty();
$this->template_dir="../templates";
$this->compile_dir="../templates_c";
$this->_db=DB::connect("mysql://$user:$pass@$host/$dbname");
}
public function __destruct() {
$this->_db->disconnect();
}
public function get_db() {return $this->_db;}
}
?>
======end=====================================
==========メインのPHP===================================
<?php
require_once("../MySmarty.class.php");
$o_smarty=new MySmarty();
$db=$o_smarty->get_db();
$stt=$db->query("SELECT * FROM books");←ここでエラーになる
$data=array();
while($row=$stt->fetchRow(DB_FETCHMODE_ASSOC)){
$data[]=array("isbn"=>$row['isbn'],"title"=>$row['title'],
"publish"=>$row['publish'],"price"=>$row['price']);
}
$o_smarty->assign("data",$data);
$o_smarty->display("structure.html");
?>