文章出處
學習php遇到一個小問題
猜想是類的成員變量的作用域問題吧。
按照Java思路應該在下面代碼是沒有問題的。
(是以php的pdo連接數據封裝成類)
class MySQL_DB{ //靜態屬性,所有哦的數據庫實例公用,避免重復連接數據庫 protected static $_dbh = null; /** * 初始化構造函數 * MySQL_DB constructor. */ public function __construct() { class_exists('PDO') or die("PDO:class not exists."); //連接數據庫 if(is_null(self::$_dbh)){ $this->_connection(); } } /** * 連接數據函數 */ protected function _connection(){ $dsn = DB_TYPE_MYSQL.':host='.DB_HOST.';port'.DB_PORT.';dbname='.DB_NAME; try{ $dbh = new PDO($dsn,DB_USER,DB_PASSWORD); //設置sql語句執行錯誤則拋出異常,事務自動回滾 $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //禁用prepared statement的仿真效果(防止sql注入) $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); }catch (PDOException $e){ die('Connection failed:'.$e->getMessage()); } $dbh->exec('SET NAME uft8');// self::$_dbh = $dbh; return $dbh; } public function _authenticate($username,$password){ $sql = 'select operatorID from wwb_admin where username=:user and password=:pwd'; $stmt = self::$_dbh->pself::$_dbh->prepare();//在使用編輯器打入變量沒有提示出prepare該函數,(認為是有問題的)// self::$_dbh->prepare() } //關閉數據庫 public function close_conn(){ if(!is_null(self::$_dbh)){ self::$_dbh = null; } }}
但是修改成
class MySQL_DB{ //靜態屬性,所有哦的數據庫實例公用,避免重復連接數據庫 protected static $_dbh = null; /** * 初始化構造函數 * MySQL_DB constructor. */ public function __construct() { class_exists('PDO') or die("PDO:class not exists."); //連接數據庫 if(is_null(self::$_dbh)){ self::$_dbh = $this->_connection();//修改的地方 } } /** * 連接數據函數 */ protected function _connection(){ $dsn = DB_TYPE_MYSQL.':host='.DB_HOST.';port'.DB_PORT.';dbname='.DB_NAME; try{ $dbh = new PDO($dsn,DB_USER,DB_PASSWORD); //設置sql語句執行錯誤則拋出異常,事務自動回滾 $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //禁用prepared statement的仿真效果(防止sql注入) $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); }catch (PDOException $e){ die('Connection failed:'.$e->getMessage()); } $dbh->exec('SET NAME uft8');// self::$_dbh = $dbh; return $dbh; } public function _authenticate($username,$password){ $sql = 'select operatorID from wwb_admin where username=:user and password=:pwd'; $stmt = self::$_dbh->pself::$_dbh->prepare();//編輯器就會自動提示了// self::$_dbh->prepare() } //關閉數據庫 public function close_conn(){ if(!is_null(self::$_dbh)){ self::$_dbh = null; } }}
不是很清楚該原因。不過按照Java思路,感覺是可以照著第一種是可以直接調用的。不過php不行。
這樣問題,猜測是變量的作用域問題。
希望有人知道的話,可以告訴我
看文倉www.kanwencang.com網友整理上傳,為您提供最全的知識大全,期待您的分享,轉載請注明出處。
歡迎轉載:http://www.kanwencang.com/bangong/20170106/82864.html
文章列表
全站熱搜