1、建立鏈接php
在配置文件中使用以下配置:mysql
//mysql 定義 /* 'db_type' => 'mysql', 'db_host' => 'localhost', 'db_user' => 'root', 'db_pwd' => '', 'db_port' => 3306, 'db_name' => 'test', */ //PDO專用定義 //PDO鏈接方式 'DB_TYPE' => 'mysql', // 數據庫類型 'DB_USER' => 'root', // 用戶名 'DB_PWD' => '', // 密碼 'DB_PREFIX' => '', // 數據庫表前綴 'DB_DSN' => 'mysql:host=localhost;dbname=test;charset=UTF8',
注意在ThinkPHP3.2.3,默認全部數據庫都是基於PDO實現的,因此DB_TYPE再也不支持PDO設置,必須採用實際的數據庫類型設置。sql
*爲了在調試時能夠顯示SQL語句,這裏能夠加上如下配置thinkphp
//頁面Trace 'SHOW_PAGE_TRACE' => true,
2、建立控制器並建立相應方法。數據庫
3、建立數據庫鏈接類。一種是經過基類Model建立,一種是建立自定義模塊。數組
經過基類Model建立:緩存
//Model基類 $user = new Model(); $user = new Model("user"); $user = M();//等同於new Model(); $user = M("user");//等同於new Model("user") $user = new Model("user","","mysql://root:@localhost/test");//第一個參數爲表名,第二個參數爲表名前綴
經過自定義模塊:安全
$user = new \Home\Model\UserModel(); $user = D("User");
*自定義模塊時,若要使用不一樣的表,可在模塊中定義如下屬性:函數
//修改前綴 protected $tablePrefix = "tp_" //修改表名 protected $tableName = "abc"; //一塊兒修改 protected $trueTableName = "tp_abc"; //修改數據庫名 protected $dbName = "aaa";
4、查詢數據url
一、基本查詢的三種方式:
//select所有顯示,find顯示一條 $user = M('User'); //-------字符串方式 var_dump($user->where('id=1 AND user="蠟筆小新"')->select()); //-------數組索引方式 默認是AND(高效) $condition['id'] = 2; $condition['username'] = 'llicat'; //改變AND爲OR $condition['_logic'] = 'OR'; //-------對象條件查詢 PHP內置類在根目錄下找 '\' $condition = new \stdClass(); $condition->id = 1; $condition->username='admin'; $condition->_logic ='or'; var_dump($user->where($condition)->select());
二、表達式查詢:eq,neq,gt等
$user = M('user'); $map['id']= array('eq','1,3');//eq,neq,gt,egt,lt...具體看手冊 eq等於 等於1和2?再加一個數組的形式不能用 用逗號 !1,3 $map['username']=array('like','%l%');//notlike 不用空格 $map['username']=array('like',array('%l%','%a%'),'and');//最後一個參數不寫默認是OR //區間查詢 $map['id']=array('between','2,4'); $map['id']=array('between',array('1','3'));//或者這樣 not between 須要空格 $map['id']=array('in','2,4');//array也行 not in空格 //EXP:自定義 $map['id'] = array('exp','=1 AND username="llicat"'); $map['id'] = array('exp','in (1,2,3)'); $map['username'] = array('exp','="123"'); $map['_logic']='OR'; var_dump($user->where($map)->select());
三、快捷查詢:
$user = M('user'); $map['username|password'] = 'llicat';// 相同查詢條件|:or &:and $map['username&password'] = array('llicat','123456','_multi'=>TRUE);//multi設置一一對應,否則username會對應多個 $map['status&score&title'] =array('1',array('gt','0'),'thinkphp','_multi'=>true);//和表大會組合 而且能夠多個 var_dump($user->where($map)->select());
四、區間查詢
$user = M('user'); $map['id'] = array(array('gt',1),array('lt',3));//用AND:不加第三個參數。 用OR:第三個參數 'OR' var_dump($user->where($map)->select());
五、組合查詢(索引數組的擴展)
//字符串查詢(_string) 複合查詢(_complex) 請求字符串查詢(_query) $user = M('user'); //-------------字符串查詢擴展 $map['id'] = array('eq',1); $map['_string'] = 'username="llicat" AND password="123456"';//這種方式不太安全,生成的SQL語句中字段名沒反單引號 $map['_logic'] = 'OR';//OR //-------------請求字符串查詢擴展 $map['id'] = array('eq',1); $map['_query'] = 'username=llicat&password=123456';//有反單引號,較安全,推薦,也能夠加_logic //-------------複合查詢擴展 $map['id'] = array('eq',1); $where['id'] = 2; $map['_complex'] = $where; $map['_logic'] ='OR'; var_dump($user->where($map)->select());
六、統計查詢:用於統計sum、avg、min、max、count等
var_dump($user->count());//括號裏寫'email'這種選擇某個字段,若是該字段可爲空,且有空,則不計算空 var_dump($user->min('id'));//sum、avg等等
七、動態查詢
var_dump($user->getByUsername('llicat')); var_dump($user->getFieldByUsername('llicat',id));//根據username找相對應id
八、SQL查詢:原生SQL查詢,query讀取,execute寫入
var_dump($user->query('SELECT * FROM user'));//根據username找相對應id var_dump($user->execute("UPDATE user SET username='admin' WHERE id='2'"));//根據username找相對應id
九、連貫操做,更多操做能夠查看ThinkPHP手冊
$user = M('User'); var_dump($user->where('id>1')->order('id ASC')->limit(2)->select()); //用數組方式或者參數方式更好更安全 var_dump($user->select(array('where'=>array('id'=>array('neq',1)),'order'=>'id DESC,username DESC','limit'=>2)));//支持多字段排序 var_dump($user->field('id,username')->select());//只返回指定字段能夠用於查詢、寫入//列名重命名須要as,且field中可使用SQL函數,數組參數 //分頁 limit\page var_dump($user->limit(0,2)->select());//從0開始顯示前兩等同於page(1,2) var_dump($user->page(2,2)->select());//每頁顯示倆,顯示第二頁,等同於limit(2,2) //alias表別名, group having,commentSQL語句註釋,join默認內鏈接 A表 on B表 第二個參數'RIGHT'能夠設置左右鏈接,union合併多個結果集 //distinct去重,cache(true)利用緩存
十、table方法:切換數據表、多表查詢
var_dump($user->table('user')->select());//能夠用簡化表名"__USER__"簡化表名不用帶前綴,table須要帶 var_dump($user->table('__DOC__')->select()); var_dump($user->field('a.id,a.neirong,b.id,b.username')->table('__DOC__ a,__USER__ b')->select());//列名重命名須要as var_dump($user->field('a.id,a.neirong,b.id,b.username')->table(array("user"=>b,"doc"=>a))->select());
十一、命名範圍
在模型中定義$_scope:
//SQL命名範圍,必須寫$_scope,有下劃線:屬性 //不設置default,默認是顯示全部數據 protected $_scope = array( 'sql1'=>array( 'where'=>array('id'=>1), ), 'sql2'=>array( 'order'=>array('id'=>DESC), 'limit'=>2, ), 'default'=>array( 'where'=>array('id'=>2), ), );
在控制器中調用:
//$user = D("User"); //沒下劃線:方法 //scope支持多個調用 var_dump($user->scope('sql1')->scope('sql2')->select());//或者scope('sql1,sql2') var_dump($user->scope('sql2',array('limit'=>4))->select());//也能夠不指定哪一個sql,直接覆蓋全部 var_dump($user->sql2()->select());//直接調用
5、create方法
#create建立數據對象,並無添加數據或者添加表,結果就是提交過來的鍵值對 #建立完成後的數據能夠直接讀取或者修改利用$user->username #保存在內存中,並無實際寫入到數據庫中,直到使用add 或者save 方法纔會真正寫入數據庫。 $user = M('User'); //--------直接create空,顯示提交過來表單的數據,且默認爲POST,接收get,create($_GET)可是create只獲取數據庫表與表單對應的信息,POST獲取全部 var_dump($user->create()); //--------數據覆蓋 $data['username']='llicat'; $data['password']='123456'; var_dump($user->create($data)); //--------直接用_POST接收 $data['username']=$_POST['username']; $data['password']=$_POST['password']; $data['date']=date('Y-md H:i:s'); var_dump($user->create($data)); //--------手工獲取數據,從對象建立新的數據對象 $data = new \stdClass(); $data->username = $_POST['username']; $data->password = $_POST['password']; $data->date = date('Y-md H:i:s'); var_dump($user->create($data)); //--------create倆個參數,第一個參數必須制定POST或者GET,第二個爲操做,insert或者update //沒指定第二個參數時,根據數據源是否包含主鍵判斷修改或者新增,相似merge into var_dump($user->create($_GET)); var_dump($user->create($_POST, \Think\Model::MODEL_INSERT)); //--------支持連貫操做field過濾、validate數據自動驗證、auto數據自動完成、token令牌驗證,與域有關 //限制字段 var_dump($user->field('username')->create());//只顯示username //在模型中限制 $user = D('User'); var_dump($user->create());
限制字段,須要在模型中限制時,能夠在模型中設置以下屬性:
//限制create protected $insertFields = 'user'; protected $updateFields = 'user';
6、數據寫入,add
//=================================數據寫入================================= $user = M('User'); $data['username']='heiheihei'; $data['password']='xixixi'; $user->add($data); //----------------------結合create $user = M("User"); //接收表單數據+建立的數據 $data = $user->create(); $data['date']=date('Y-m-d H:i:s'); $user->add($data); //----------------------連貫操做data,能夠用於寫入多個對象 $user->data($data)->add(); //或者能夠用url格式 $data ='username=heiheihei&password=xixixi'; $user->data($data)->add();
7、數據查詢,select
$user=M('user'); //顯示全部 var_dump($user->select()); //顯示第一條 var_dump($user->find()); //獲得指定字段,且只顯示一個 var_dump($user->getField('username')); //顯示該字段的全部,不僅顯示一個 var_dump($user->getField('username',true)); //顯示多個字段,直接會顯示全部,重複的會被屏蔽! var_dump($user->getField('username,password')); //指定分割符號,第二個參數 var_dump($user->getField('id,username,password',':')); //限制limit 第二個參數 var_dump($user->getField('id,username,password',2));
8、更新數據,save
$user=M('user'); $data['username'] = 'oooooooooooo'; $data['password'] = 'xxxxxxxxxxxx'; $map['id']=4; $user->where($map)->save($data); //默認主鍵爲條件 $data['id']=5; $data['username'] = 'tttttt'; $data['password'] = 'qqqqqq'; $user->save($data); //結合create,id也表單傳過來時 $user->create(); $user->save();//返回值0:沒修改,1:返回成功 //修改某一個字段值 $map['id']=1; $user->where($map)->setField('username','heihei'); //統計累加累減 count是一個爲int的字段名 $map['id']=1; $user->where($map)->setInc('count',1);//累加 $user->where($map)->setDec('count',1);//累減
9、刪除數據,delete
$user=M('user'); //默認根據主鍵刪除 $user->delete(6); //---------- $map['id']=6; $user->where($map)->delete(); //批量刪除多個,根據主鍵要加引號 $user->delete('1,2,3'); //刪除多個條件的 $map['count']=0; $user->where($map)->order(array('id'=>'DESC'))->limit(1)->delete(); //刪除全部數據,謹慎 1或者true?回頭能夠試試 echo $user->where('1')->delete();//成功返回1 ,沒刪返回0
10、ActiveRecord模式,對象化的操做方式
$user=M('user'); //---------------添加 $user->username = 'llicat'; $user->password ='xixixi'; $user->add(); //結合create 處理表達 $user->create(); $user->date =date('Y-md H:i:s'); $user->add(); //----------------查找 //find找到主鍵爲4的值 var_dump($user->find(4)); //找到username=llicat的記錄 var_dump($user->getByUsername('llicat')); //輸出 $user->getByUsername('llicat'); echo $user->username; //經過主鍵查詢多個 var_dump($user->select('1,2,3')); //-----------------修改 //產生了兩條sql,第一條找到數據,第二條修改,且元數據都取出了,效率不高 $user->find(1); $user->username='xingxing'; $user->save(); //-----------------刪除 //產生兩條sql $user->find(5); $user->delete(); //根據主鍵 $user->delete('1,2');
11、字段映射:表單名和數據庫的字段名不對稱,用create不能直接獲取,須要用模塊作處理
模塊中:
//字段映射 protected $_map = array( 'yonghuming'=>'username', 'mima'=>'password', );
控制器中:
//須要用模塊處理 $user = D('user'); var_dump($user->create());
by llicat
##轉載請註明出處http://www.cnblogs.com/llicat/