課程
/后端開發
/PHP
/MVC架構模式分析與設計
請問老師,要使用mysqli來操作mysql數據庫應該怎么修改DB類和mysql類啊,不理解DB類和mysql類之間的關聯,求解釋
2016-08-21
源自:MVC架構模式分析與設計 7-7
正在回答
請問一下連接數據庫那部分中的public?function?connect($config?=?''),為什么要$config=''
xdfcc
如果mysqli采用面向對象的思想該怎么解決呢?
我用的就是mysqli類,可以分享一下。已經過初步測試,能用。深度測試還沒做。
<?php class?mysqliDB{ ????public?static?$mysqli?=?null; ????/* ????*?報錯函數 ????*?@param?string?$err ????*/ ????function?error($err){ ????????die("對不起,您的操作有誤,錯誤原因為:"?.?$err); ????} ????/* ????*?連接數據庫 ????*連接mysqli?:?mysqli是mysql的增強版本,用pdo連接數據庫效率要比mysql直*接連接要慢,綜合考慮,本人嘗試用mysqli以面象對象的方式操作數據庫 ????*?@param?string?$config ????*???@param?string?$dbhost?主機名 ????*???@param?string?$dbuser?用戶名 ????*???@param?string?$dbpwd?密碼 ????*???@param?string?$dbname?數據庫名 ????*???@param?string?$dbcharset?字符集/編碼 ????*?@return?boolean ????*/ //????public?function?__construct($config?=?''){ ????public?function?connect($config?=?''){ ????????if(!class_exists('mysqli')){ ????????????$this->error('不支持mysqli,請先開啟'); ????????} ????????if(is_array($config)?&&?!empty($config)){ ????????????extract($config); ??????? ????????????if(empty($dbhost)){ ????????????????$this->error('沒有定義數據庫配置'); ????????????} ????????} ????????if(!isset(self::$mysqli)){ ????????????try{ ????????????????self::$mysqli?=?new?mysqli($dbhost,$dbuser,$dbpwd,$dbname); ????????????}catch(mysqli_sql_exception?$e){ ????????????????$this->error($e->getMessage); ????????????} ????????????if(self::$mysqli->errno){ ????????????????error('('.?self::$mysqli->errno?.?')'?.?self::$mysqli->error); ????????????????return?false; ????????????} ????????????if(!self::$mysqli->set_charset("utf8")){ ????????????????error('('.?self::$mysqli->errno?.?')'?.?self::$mysqli->error); ????????????} ????????????return?self::$mysqli; ????????} ???????? ????} ???? ????/* ????*?執行sql語句 ????*?@param?string?$sql ????*?@return??bool?返回成功、資源、失敗 ????*/ ????function?query($sql){ ??????? ????????if((($query?=?mysqli_query(self::$mysqli,$sql)))?===?false){ ????????????$this->error($sql?.?'<br/>'?.?mysqli_error(self::$mysqli)); ????????}else{ ?????????? ????????????return?$query; ????????} ????} ???? ????/* ????*?列表 ????*?@param?source?$query??sql語句通過mysqli_query執行出來的資源 ????*?@return?array?列表數組 ????*/ ????function?findAll($query){ ????????return?mysqli_fetch_all($query,MYSQLI_ASSOC); ????} ???? ????/* ????*?單條 ????*?@param?source?$query??sql語句通過mysqli_query執行出來的資源 ????*?@return?array?單條信息數組 ????*/ ????function?findOne($query){ ????????return?mysqli_fetch_array($query,MYSQLI_ASSOC); ????} ????/*? ????*?指定行的指定字段的值 ????*?@param?source?$query?sql語句通過mysqli_query執行出來的資源 ????*?@return?array?返回指定行的指定字段值 ????*/ ????function?findResult($query,$row=0,$field=0){ ????????mysqli_data_seek($query,$row); ????????return?mysqli_fetch_row($query)[$field]; ????} ???? ????/* ????*?添加行 ????*?@param?string?$table ????*?@param?array?$arr?添加數組?(二維數組) ????*???[['name'=>'cat1','age'=>1],['name'=>'cat2','age'=>2],...] ????*?@return?返回插入的id ????*/ ????function?insert($table,$arr){ ???????? ????????$keys?=?array_keys($arr[0]); ????????array_walk($keys,array('mysqliDB','addSpecialChar')); ????????$fields?=?join(',',$keys); ????????$binds?=?'('.?str_replace('?',',',?trim(str_repeat("??",count($arr[0]))))?.?')'; ????????$types?=?$this->getTypes($arr[0]); ????????$this->addSpecialChar($table); ????????$sql?=?"INSERT?INTO?{$table}({$fields})?VALUES?{$binds}?"; ????????$stmt?=?self::$mysqli->prepare($sql); ????????if(!$stmt){ ????????????$this->error("sql?stament?為空"); ????????} ????????foreach($arr?as?$k?=>?$v){ ????????????extract($v); ????????????foreach($v?as?$k1?=>?$v1){ ????????????????eval('$vals[\''.?$k?.?'\']?[\''.?$k1?.?'\']?=?&$'?.?$k1?.?';'); ????????????} ????????????unset($k1,$v1); ???????????? ????????} ????????unset($k,$v); ??? ????????$store?=?array(); ????????foreach($vals?as?$v){ ????????????call_user_func_array(array($stmt,?'bind_param'),?array_merge(array($types),?$v)); ????????????mysqli_stmt_execute($stmt); ????????????$store[]?=?$stmt->insert_id; ????????} ????????unset($v); ????????return?$store;?? ????} ???? ????/* ????*?注防sql注放按照insert的方法 ????*?修改函數? ????*?@param?string?$table ????*?@param?array?$arr?修改數組(一維數組) ????*?@param?string?$where?條件?array('and'?=>?array('name'=>?'cat1',?id=>?7),?'or'?=>?array('sex'?=>?1)); ????*?@return? ????*/ ????function?update($table,$arr,$where){ ???????? ????????$kArr?=?array(); ????????foreach($arr?as?$k?=>?$v){ ????????????$v?=?mysqli_real_escape_string(self::$mysqli,$v); ????????????$kArr[]?=?$this->addSpecialChar($k)?.?"='"?.$v?.?"'"; ????????} ????????$kArr?=?implode(",",?$kArr); ????????$this->addSpecialChar($table); ????????$sql?=?"update?"?.$table?.?"?set?"?.?$kArr?.?"?where?"?.?$where; //????????return?$sql; ????????$this->query($sql); ????} ???? ????/* ????*?刪除函數 ????*?@param?string?$table?表名 ????*?@param?string?$where?條件 ????*/ ????function?del($table,$where){ ????????$this->addSpecialChar($table); ????????$sql?=?"delete?from?{$table}?where?{$where}"; //????????return?$sql; ????????$this->query($sql); ????} ???? ???? ????/* ????*獲取參數類型首字母 ????*?@param?array?$arr? ????*/ ???? ????function?getTypes($arr=array()){ ????????$strType?=?''; ????????if(!empty($arr)){ ????????????foreach($arr?as?$var){ ????????????????$chrType?=?substr((string)gettype($var),0,1); ????????????????$strType?.=?(!in_array($chrType,array("i","d","s")))???"b"?:?$chrType; ????????????} ????????} ???????? ????????return?$strType; ????} ???? ????/* ????*?通過反引號引用字段 ????*?@param?unknown?$value ????*?@return?string ????*/ ????function?addSpecialChar(&$value){ ????????if($value==='*'||strpos($value,'.')!==false||strpos($value,'`')!==false){ ????????????//不用做處理 ????????}elseif(strpos($value,'`')===false){ ????????????$value='`'.trim($value).'`'; ????????} ????????return?$value; ????} ???? }
慕粉3511118
我們可以根據DB類來使用其他的數據庫而不僅僅是mysql;mysql類只是封裝了mysql數據庫的操作方法。DB類是一個大工廠,mysql類是這個工廠里的一個生產車間,當然也有另外的生產車間,個人是這么理解的。
舉報
通過學習MVC理論知識,由淺入深帶您實現人生第一個MVC框架
1 回答數據庫連接超時
1 回答如何使用CI框架
2 回答框架課程呢?
2 回答這個工廠類不是說可以調用各種數據庫嘛,那里面連接數據庫的connect是引用mysql.class.php里的mysql_connect呀?靠譜me
2 回答mvc框架
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-12-21
請問一下連接數據庫那部分中的public?function?connect($config?=?''),為什么要$config=''
2016-12-18
如果mysqli采用面向對象的思想該怎么解決呢?
2016-08-26
我用的就是mysqli類,可以分享一下。已經過初步測試,能用。深度測試還沒做。
2016-08-24
我們可以根據DB類來使用其他的數據庫而不僅僅是mysql;mysql類只是封裝了mysql數據庫的操作方法。DB類是一個大工廠,mysql類是這個工廠里的一個生產車間,當然也有另外的生產車間,個人是這么理解的。