亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

使用mysqli連接數據庫應該怎么修改框架呢

請問老師,要使用mysqli來操作mysql數據庫應該怎么修改DB類和mysql類啊,不理解DB類和mysql類之間的關聯,求解釋

正在回答

4 回答

請問一下連接數據庫那部分中的public?function?connect($config?=?''),為什么要$config=''

0 回復 有任何疑惑可以回復我~
#1

xdfcc

給個默認值為了讓代碼更嚴謹一點!自己寫的時候知道要傳哪些參數,如果別人用你寫的公共函數可能不知道要傳什么參數,如果忘記傳參或者傳數量不對都會出現未知錯誤,顯然程序中沒有考慮這些,其實$config = ''也不夠嚴謹,可以有更多處理
2017-11-10 回復 有任何疑惑可以回復我~

如果mysqli采用面向對象的思想該怎么解決呢?

0 回復 有任何疑惑可以回復我~

我用的就是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;
????}
????
}


1 回復 有任何疑惑可以回復我~
#1

慕粉3511118

請問一下連接數據庫那部分中的public function connect($config = ''),為什么要$config=''
2016-12-21 回復 有任何疑惑可以回復我~

我們可以根據DB類來使用其他的數據庫而不僅僅是mysql;mysql類只是封裝了mysql數據庫的操作方法。DB類是一個大工廠,mysql類是這個工廠里的一個生產車間,當然也有另外的生產車間,個人是這么理解的。

1 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

使用mysqli連接數據庫應該怎么修改框架呢

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號