thinkphp資料庫
8.4.4 Model類
getModelName() 獲取當前Model的名稱
getTableName() 獲取當前Model的數據表名稱
switchModel(type,vars=array()) 動態切換模型
table() 設置當前操作的數據表
field() 設置要查詢的數據欄位
where() 設置查詢或者操作條件
data(data) 設置數據對象
order(order) 設置排序
limit(limit) 查詢限制
page(page) 查詢分頁
join(join) 進行JOIN查詢
having(having) 進行having查詢
group(group) 進行group查詢
lock(lock) 查詢鎖定
distinct(distinct) 唯一性查詢
count(field) 記錄統計
sum(field) 總數查詢
min(field) 最小值查詢
max(field) 最大值查詢
avg(field) 平均值查詢
_initialize() 模型初始化方法
_facade(data) 對保存到資料庫的數據進行處理
_before_write(&data) 寫入數據前的回調方法 包括新增和更新
add(data='',options=array()) 新增數據
_before_insert(&data,options) 寫入數據前的回調方法
_after_insert(data,options) 寫入數據後的回調方法
selectAdd(fields='',table='',options=array()) 通過Select方式添加記錄
save(data='',options=array()) 更新數據到資料庫
_before_update(&data,options) 更新數據前的回調方法
_after_update(data,options) 更新成功後的回調方法
delete(options=array()) 刪除數據
_after_delete(data,options) 刪除成功後的回調方法
select(options=array()) 查詢數據集
_after_select(&resultSet,options) 查詢成功後的回調方法
findAll(options=array()) select方法的別名
_options_filter(&options) 表達式過濾回調方法
find(options=array()) 查詢數據
_after_find(&result,options) 查詢成功的回調方法
setField(field,value,condition='') 設置記錄的某個欄位值
setInc(field,condition='',step=1) 欄位值增長
setDec(field,condition='',step=1) 欄位值減少
getField(field,condition='',sepa=' ') 獲取某個欄位值
create(data='',type='') 創建數據對象
autoCheckToken(data) 表單令牌驗證
query(sql) 執行原生SQL查詢
execute(sql='') 執行原生SQL操作
startTrans() 啟動事務
commit() 提交事務
rollback() 事務回滾
getError() 獲取模型的錯誤信息
getDbError() 獲取資料庫的錯誤信息
getLastInsID() 獲取最後執行的SQL語句
getPk() 獲取主鍵名稱
getDbFields() 獲取數據表的欄位信息
regex(value,rule) 使用正則驗證數據
setProperty(name,value) 設置模型的屬性值
2.1版新增方法:
db(linkNum,config='') 切換當前資料庫連接
高級模型類AdvModel
topN(count,options=array()) 查詢滿足條件的前N個記錄
getN(position=0,options=array()) 查詢符合條件的第N條記錄
0 表示第一條記錄 -1 表示最後一條記錄
first(options=array()) 獲取滿足條件的第一條記錄
last(options=array()) 獲取滿足條件的最後一條記錄
returnResult(data,type='') 返回指定的數據類型
setLazyInc(field,condition='',step=1,lazyTime=0) 欄位值延遲增長
setLazyDec(field,condition='',step=1,lazyTime=0) 欄位值延遲減少
addConnect(config,linkNum=NULL) 增加資料庫連接
delConnect(linkNum) 刪除資料庫連接
closeConnect(linkNum) 關閉資料庫連接
switchConnect(linkNum,name='') 切換資料庫連接
patchQuery(sql=array()) 批處理執行SQL語句
getPartitionTableName(data=array()) 得到分表的的數據表名
2. 怎麼樣配置thinkphp 與本地mysql和sql server同時連接倆個資料庫
thinkphp 同時連接兩個資料庫的配置方法如下:
1、在Db.class.php腳本文件裡面的類增加一個魔術方法__get(),寫法如下:
public function __get($propertyName)
{ return $this->$propertyName;
}
這個方法是用來訪問類中protected $config成員屬性用的。有的人可能會說,直接把protected改成public豈不是更好。這樣只解決了基類的問題,假如,子類也同樣進行了受保護,那要你更改更多的文件,這是我們做IT程序員非常不願意看到的事情。
2、在Model.class.php中的getTableName()方法更改如下:
$tablepre = $this->db->config['tablepre'];
if(empty($this->trueTableName)) {
$tableName??= empty($tablepre) ? $this->tablePrefix : $tablepre;
if(!empty($this->tableName)) {
$tableName .= $this->tableName;
}
else
{
$tableName .= parse_name($this->name);
}
$this->trueTableName? ? =? ?strtolower($tableName);
}
return (!empty($this->dbName)?$this->dbName.'.':'').$this->
trueTableName;這樣就完成了多庫自由切換時,導致的表前綴問題。
/*******************面向對象PDO連接方式*********************/
'DB_TYPE' => 'PDO', // 資料庫類型
'DB_DSN' => 'mysql:host=localhost;dbname=master', // DSN連接。
'DB_USER' => 'root', // 資料庫用戶名
'DB_PWD' => '123456', // 資料庫密碼
'DB_PORT' => '3306', // 資料庫埠
'DB_PREFIX' => 'g_', // 數據表前綴
'DB_CHARSET' => 'utf8', // 資料庫編碼默認採用utf8
3. thinkphp M資料庫無法切換
//切換新資料庫
$model=M();
//(sql_type://username:password@address:3306/db_name)
//sql_type:資料庫類型mysql或者mysqli
$result=$model->db(1,"sql_type://username:password@address:3306/db_name");
//sql語句
$query_sql=XXXXXX;
//查詢數據並返回
$data=$result->db(1)->query($query_sql);
4. thinkphp的資料庫是在哪
這個你要先建一個資料庫,然後在config.php文件或者直接在thinkphp文件夾下面的配置文件那裡填寫好資料庫的名字,地址賬號密碼等然後才可以用的。
然後在控制器那裡進行操作就行了。這里因為你還沒有建表
所以要執行
$model = M();
$sql = 'CREATE TABLE IF NOT EXISTS `think_data`(`id` int(8) unsigned NOT NULL AUTO_INCREMENT,`data` varchar(255) NOT NULL,PRIMARY KEY(`id`)) ENGINE=MyISAM DEFAULT CHARSET = utf8';
$model->execute($sql);
這樣表就建成了
然後同理
$sql = 'INSERT INTO `think_data`(`id`,`data`) VALUES(1,"thinkphp"),(2"PHP"),(3,"framework")';
$model->execute($sql);
就行了
大概就是這樣子吧
5. thinkphp 如何手動連接資料庫
//資料庫配置1
'DB_CONFIG1' = array(
'db_type' => 'mysql',
'db_user' => 'root',
'db_pwd' => '1234',
'db_host' => 'localhost',
'db_port' => '3306',
'db_name' => 'thinkphp'
),
//資料庫配置2
'DB_CONFIG2' => 'mysql://root:1234@localhost:3306/thinkphp';
這樣,設置2個資料庫。切換方法如下:
$this->db(1,"DB_CONFIG1")->query("查詢SQL");
$this->db(2,"DB_CONFIG2")->query("查詢SQL");
這樣來調用,就可以了。至於裡面的參數,你應該了解吧,DB2的配置也可以照第1個那樣寫,主要注意一下調用形式就可以了。希望幫到你
$this->db(1)->table("top_user")->find();
這個是指定表的查詢,M的使用方法:
M("User","think_","DB_CONFIG1")->query("查詢SQL");
think_是表前綴,2個庫肯定不一樣。
6. thinkphp支持哪些資料庫
目前的資料庫包括Mysql、SqlServer、PgSQL、Sqlite、Oracle、Ibase、Mongo,也包括對PDO的支持,如果應用需要使用資料庫,必須配置資料庫連接信息,資料庫的配置文件有多種定義方式。
7. 通過ThinkPHP文件建立資料庫數據表
if(!is_writable('config.php')){
emMsg('配置文件(config.php)不可寫。如果您使用的是Unix/Linux主機,請修改該文件的許可權為777。如果您使用的是Windows主機,請聯系管理員,將此文件設為可寫');
}
if(!is_writable(EMLOG_ROOT.'/content/cache')){
emMsg('緩存文件不可寫。如果您使用的是Unix/Linux主機,請修改緩存目錄(content/cache)下所有文件的許可權為777。如果您使用的是Windows主機,請聯系管理員,將該目錄下所有文件設為可寫');
}
$config="<?php "
."//mysqldatabaseaddress "
."define('DB_HOST','$db_host');"
." //mysqldatabaseuser "
."define('DB_USER','$db_user');"
." //databasepassword "
."define('DB_PASSWD','$db_pw');"
." //databasename "
."define('DB_NAME','$db_name');"
." //databaseprefix "
."define('DB_PREFIX','$db_prefix');"
." //authkey "
."define('AUTH_KEY','".getRandStr(32).md5($_SERVER['HTTP_USER_AGENT'])."');"
." //cookiename "
."define('AUTH_COOKIE_NAME','EM_AUTHCOOKIE_".getRandStr(32,false)."');"
." ";
$fp=@fopen('config.php','w');
$fw=@fwrite($fp,$config);
if(!$fw){
emMsg('配置文件(config.php)不可寫。如果您使用的是Unix/Linux主機,請修改該文件的許可權為777。如果您使用的是Windows主機,請聯系管理員,將此文件設為可寫');
}
fclose($fp);
//密碼加密存儲
$PHPASS=newPasswordHash(8,true);
$adminpw=$PHPASS->HashPassword($adminpw);
$dbcharset='utf8';
$type='MYISAM';
$table_charset_sql=$DB->getMysqlVersion()>'4.1'?'ENGINE='.$type.'DEFAULTCHARSET='.$dbcharset.';':'ENGINE='.$type.';';
if($DB->getMysqlVersion()>'4.1'){
$DB->query("ALTERDATABASE`{$db_name}`_general_ci;",true);
}
$widgets=Option::getWidgetTitle();
$sider_wg=Option::getDefWidget();
$widget_title=serialize($widgets);
$widgets=serialize($sider_wg);
define('BLOG_URL',getBlogUrl());
$sql="
DROPTABLEIFEXISTS{$db_prefix}blog;
CREATETABLE{$db_prefix}blog(
gidint(10)unsignedNOTNULLauto_increment,
titlevarchar(255)NOTNULLdefault'',
datebigint(20)NOTNULL,
contentlongtextNOTNULL,
excerptlongtextNOTNULL,
aliasVARCHAR(200)NOTNULLDEFAULT'',
authorint(10)NOTNULLdefault'1',
sortidint(10)NOTNULLdefault'-1',
typevarchar(20)NOTNULLdefault'blog',
viewsint(10)unsignedNOTNULLdefault'0',
comnumint(10)unsignedNOTNULLdefault'0',
attnumint(10)unsignedNOTNULLdefault'0',
topenum('n','y')NOTNULLdefault'n',
sortopenum('n','y')NOTNULLdefault'n',
hideenum('n','y')NOTNULLdefault'n',
checkedenum('n','y')NOTNULLdefault'y',
allow_remarkenum('n','y')NOTNULLdefault'y',
passwordvarchar(255)NOTNULLdefault'',
templatevarchar(255)NOTNULLdefault'',
PRIMARYKEY(gid),
KEYdate(date),
KEYauthor(author),
KEYsortid(sortid),
KEYtype(type),
KEYviews(views),
KEYcomnum(comnum),
KEYhide(hide)
)".$table_charset_sql."
INSERTINTO{$db_prefix}blog(gid,title,date,content,excerpt,author,views,comnum,attnum,top,sortop,hide,allow_remark,password)VALUES(1,'歡迎使用emlog','".time()."','恭喜您成功安裝了emlog,這是系統自動生成的演示文章。編輯或者刪除它,然後開始您的創作吧!','',1,0,0,0,'n','n','n','y','');
DROPTABLEIFEXISTS{$db_prefix}attachment;
CREATETABLE{$db_prefix}attachment(
aidint(10)unsignedNOTNULLauto_increment,
blogidint(10)unsignedNOTNULLdefault'0',
filenamevarchar(255)NOTNULLdefault'',
filesizeint(10)NOTNULLdefault'0',
filepathvarchar(255)NOTNULLdefault'',
addtimebigint(20)NOTNULLdefault'0',
widthint(10)NOTNULLdefault'0',
heightint(10)NOTNULLdefault'0',
mimetypevarchar(40)NOTNULLdefault'',
thumforint(10)NOTNULLdefault0,
PRIMARYKEY(aid),
KEYblogid(blogid)
)".$table_charset_sql."
DROPTABLEIFEXISTS{$db_prefix}comment;
CREATETABLE{$db_prefix}comment(
cidint(10)unsignedNOTNULLauto_increment,
gidint(10)unsignedNOTNULLdefault'0',
pidint(10)unsignedNOTNULLdefault'0',
datebigint(20)NOTNULL,
postervarchar(20)NOTNULLdefault'',
commenttextNOTNULL,
mailvarchar(60)NOTNULLdefault'',
urlvarchar(75)NOTNULLdefault'',
ipvarchar(128)NOTNULLdefault'',
hideenum('n','y')NOTNULLdefault'n',
PRIMARYKEY(cid),
KEYgid(gid),
KEYdate(date),
KEYhide(hide)
)".$table_charset_sql."
DROPTABLEIFEXISTS{$db_prefix}options;
CREATETABLE{$db_prefix}options(
option_idINT(11)UNSIGNEDNOTNULLauto_increment,
option_nameVARCHAR(255)NOTNULL,
option_valueLONGTEXTNOTNULL,
PRIMARYKEY(option_id),
KEYoption_name(option_name)
)".$table_charset_sql."
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('blogname','點滴記憶');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('bloginfo','使用emlog搭建的站點');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('site_title','');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('site_description','');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('site_key','emlog');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('log_title_style','0');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('blogurl','".BLOG_URL."');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('icp','');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('footer_info','');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('admin_perpage_num','15');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('rss_output_num','0');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('rss_output_fulltext','y');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('index_lognum','10');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('index_comnum','10');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('index_twnum','10');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('index_newtwnum','5');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('index_newlognum','5');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('index_randlognum','5');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('index_hotlognum','5');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('comment_subnum','20');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('nonce_templet','default');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('admin_style','default');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('tpl_sidenum','1');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('comment_code','n');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('comment_needchinese','y');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('comment_interval',60);
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('isgravatar','y');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('isthumbnail','y');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('att_maxsize','20480');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('att_type','rar,zip,gif,jpg,jpeg,png,txt,pdf,docx,doc,xls,xlsx');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('att_imgmaxw','420');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('att_imgmaxh','460');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('comment_paging','y');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('comment_pnum','10');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('comment_order','newer');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('login_code','n');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('reply_code','n');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('iscomment','y');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('ischkcomment','y');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('ischkreply','n');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('isurlrewrite','0');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('isalias','n');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('isalias_html','n');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('isgzipenable','n');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('isxmlrpcenable','n');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('ismobile','n');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('isexcerpt','n');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('excerpt_subnum','300');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('istwitter','y');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('istreply','n');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('topimg','content/templates/default/images/top/default.jpg');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('custom_topimgs','a:0:{}');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('timezone','8');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('active_plugins','');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('widget_title','$widget_title');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('custom_widget','a:0:{}');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('widgets1','$widgets');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('widgets2','');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('widgets3','');
INSERTINTO{$db_prefix}options(option_name,option_value)VALUES('widgets4','');
8. thinkphp 資料庫查詢怎麼查
thinkphp如何查詢資料庫?
資料庫查詢
ThinkPHP內置了非常靈活的查詢方法,可以快速的進行數據查詢操作。
查詢條件可以用於CURD等任何操作,作為where方法的參數傳入即可。
ThinkPHP可以支持直接使用字元串作為查詢條件,但是大多數情況推薦使用索引數組或者對象來作為查詢條件,因為會更加安全。
查詢方式
一、使用字元串作為查詢條件
這是最傳統的方式,但是安全性不高,例如:
1
2
$User = M("User"); // 實例化User對象
$User->where('type=1 AND status=1')->select();
最後生成的SQL語句是
1
SELECT * FROM think_user WHERE type=1 AND status=1
二、使用數組作為查詢條件
1
2
3
4
5
$User = M("User"); // 實例化User對象
$condition['name'] = 'thinkphp';
$condition['status'] = 1;
// 把查詢條件傳入查詢方法
$User->where($condition)->select();
最後生成的SQL語句是
1
SELECT * FROM think_user WHERE 'name'='thinkphp' AND status=1
如果進行多欄位查詢,那麼欄位之間的默認邏輯關系是 邏輯與 AND,但是用下面的規則可以更改默認的邏輯判斷,通過使用 _logic 定義查詢邏輯:
1
2
3
4
5
6
$User = M("User"); // 實例化User對象
$condition['name'] = 'thinkphp';
$condition['account'] = 'thinkphp';
$condition['_logic'] = 'OR'; //定義查詢邏輯
// 把查詢條件傳入查詢方法
$User->where($condition)->select();
最後生成的SQL語句是
1
SELECT * FROM think_user WHERE 'name'='thinkphp' OR `account`='thinkphp'
三、使用對象方式來查詢 (這里以stdClass內置對象為例)
1
2
3
4
5
6
$User = M("User"); // 實例化User對象
// 定義查詢條件
$condition = new stdClass();
$condition->name = 'thinkphp';
$condition->status= 1;
$User->where($condition)->select();
最後生成的SQL語句和上面一樣
1
SELECT * FROM think_user WHERE `name`='thinkphp' AND status=1
使用對象方式查詢和使用數組查詢的效果是相同的,並且是可以互換的,大多數情況下,我們建議採用數組方式更加高效,後面我們會以數組方式為例來講解具體的查詢語言用法。
表達式查詢
上面的查詢條件僅僅是一個簡單的相等判斷,可以使用查詢表達式支持更多的SQL查詢語法,並且可以用於數組或者對象方式的查詢(下面僅以數組方式為例說明),查詢表達式的使用格式:
1
$map['欄位名'] = array('表達式','查詢條件');
表達式不分大小寫,支持的查詢表達式有下面幾種,分別表示的含義是:
1
2
3
4
$map['id'] = array('eq',100); id = 100;
$map['id'] = array('egt',100);id >= 100
$map['name'] = array('like','thinkphp%'); name like 'thinkphp%' 模糊查詢
$map['a'] =array('like',array('%thinkphp%','%tp'),'OR');$map['b'] =array('notlike',array('%thinkphp%','%tp'),'AND'); (a like '%thinkphp%' OR a like '%tp') AND (b not like '%thinkphp%' AND b not like '%tp')
本文來自ThinkPHP框架技術文章欄目:http://www.php.cn/phpkj/thinkphp/
以上就是thinkphp如何查詢資料庫的詳細內容,更多請關注php中文網其它相關文章!
9. thinkphp 用redis 怎麼選擇資料庫
再配置一個資料庫連接,設置默認資料庫是redis,第二個資料庫可選使用,比如:
$model=newModel();
$data=$model->db(1,'db2')->query($sql);//db2是在配置里的另外一個資料庫連接
10. thinkphp配置資料庫文件在哪
thinkphp\common文件夾中的convention.php中是tp的核心配置文件,不能亂動,如果要想更改裡面的配置,在conf
文件夾裡面的config.php可以配置,可以這樣寫
?php
return
array(
'db_type'
=
'mysql',//
資料庫類型
'db_host'
=>
'127.0.0.1',//
資料庫伺服器地址
'db_name'
=>
'thinkphp',//
資料庫名稱
'db_user'
=>
'root',//
資料庫用戶名
'db_pwd'
=>
'123',//
資料庫密碼
'db_prefix'
=>
'tp_',//
數據表前綴
'db_charset'
=>
'utf8',//
網站編碼
'db_port'
=>
'3306',//
資料庫埠
'app_debug'
=>
false,//
開啟調試模式
);
?>
也可以在最外邊寫,就是與thinkphp框架同一目錄中寫一個config.php文件,格式如同上面的一樣,不過在conf
文件夾裡面的config.php中得包含最外邊的那個config.php