ThinkPHP內(nèi)置了抽象數(shù)據(jù)庫訪問層,把不同的數(shù)據(jù)庫操作封裝起來,我們只需要使用公共的Db類進行操作,而無需針對不同的數(shù)據(jù)庫寫不同的代碼和底層實現(xiàn),Db類會自動調(diào)用相應(yīng)的數(shù)據(jù)庫驅(qū)動來處理。目前的數(shù)據(jù)庫包括Mysql、SqlServer、PgSQL、Sqlite、Oracle、Ibase、Mongo,也包括對PDO的支持,如果應(yīng)用需要使用數(shù)據(jù)庫,必須配置數(shù)據(jù)庫連接信息,數(shù)據(jù)庫的配置文件有多種定義方式。

按需開發(fā)可以根據(jù)自己的需求進行定制,成都網(wǎng)站設(shè)計、網(wǎng)站制作構(gòu)思過程中功能建設(shè)理應(yīng)排到主要部位公司成都網(wǎng)站設(shè)計、網(wǎng)站制作的運用實際效果公司網(wǎng)站制作網(wǎng)站建立與制做的實際意義
常用的配置方式是在項目配置文件中添加下面的參數(shù):
?php
//項目配置文件
return array(
//數(shù)據(jù)庫配置信息
'DB_TYPE' = 'mysql', // 數(shù)據(jù)庫類型
'DB_HOST' = 'localhost', // 服務(wù)器地址
'DB_NAME' = 'thinkphp', // 數(shù)據(jù)庫名
'DB_USER' = 'root', // 用戶名
'DB_PWD' = '', // 密碼
'DB_PORT' = 3306, // 端口
'DB_PREFIX' = 'think_', // 數(shù)據(jù)庫表前綴
//其他項目配置參數(shù)
// ...
);
或者采用如下配置
'DB_DSN' = 'mysql://username:password@localhost:3306/DbName'
使用DB_DSN方式定義可以簡化配置參數(shù),DSN參數(shù)格式為:
數(shù)據(jù)庫類型://用戶名:密碼@數(shù)據(jù)庫地址:數(shù)據(jù)庫端口/數(shù)據(jù)庫名
如果兩種配置參數(shù)同時存在的話,DB_DSN配置參數(shù)優(yōu)先。
注意:如果要設(shè)置分布式數(shù)據(jù)庫,暫時不支持DB_DSN方式配置。1
如果采用PDO驅(qū)動的話,則必須首先配置DB_TYPE 為pdo,然后還需要單獨配置其他參數(shù),例如:
//PDO連接方式
'DB_TYPE' = 'pdo', // 數(shù)據(jù)庫類型
'DB_USER' = 'root', // 用戶名
'DB_PWD' = '', // 密碼
'DB_PREFIX' = 'think_', // 數(shù)據(jù)庫表前綴
'DB_DSN' = 'mysql:host=localhost;dbname=thinkphp;charset=UTF-8'
注意:PDO方式的DB_DSN配置格式有所區(qū)別,根據(jù)不同的數(shù)據(jù)庫類型設(shè)置有所不同。
配置文件定義的數(shù)據(jù)庫連接信息一般是系統(tǒng)默認采用的,因為一般一個項目的數(shù)據(jù)庫訪問配置是相同的。該方法系統(tǒng)在連接數(shù)據(jù)庫的時候會自動獲取,無需手動連接。
可以對每個項目和不同的分組定義不同的數(shù)據(jù)庫連接信息,如果開啟了調(diào)試模式的話,還可以在不同的應(yīng)用狀態(tài)的配置文件里面定義獨立的數(shù)據(jù)庫配置信息。1
第二種 在模型類里面定義connection屬性
如果在某個模型類里面定義了connection屬性的話,則實例化該自定義模型的時候會采用定義的數(shù)據(jù)庫連接信息,而不是配置文件中設(shè)置的默認連接信息,通常用于某些數(shù)據(jù)表位于當前數(shù)據(jù)庫連接之外的其它數(shù)據(jù)庫,例如:
//在模型里單獨設(shè)置數(shù)據(jù)庫連接信息
protected $connection = array(
'db_type' = 'mysql',
'db_user' = 'root',
'db_pwd' = '1234',
'db_host' = 'localhost',
'db_port' = '3306',
'db_name' = 'thinkphp'
);
也可以采用DSN方式定義,例如:
//或者使用DSN定義
protected $connection = 'mysql://root:1234@localhost:3306/thinkphp';
如果我們已經(jīng)在配置文件中配置了額外的數(shù)據(jù)庫連接信息,例如:
//數(shù)據(jù)庫配置1
'DB_CONFIG1' = array(
'db_type' = 'mysql',
'db_user' = 'root',
'db_pwd' = '1234',
'db_host' = 'localhost',
'db_port' = '3306',
'db_name' = 'thinkphp'
),
//數(shù)據(jù)庫配置2
'DB_CONFIG2' = 'mysql://root:1234@localhost:3306/thinkphp';
那么,我們可以把模型類的屬性定義改為:
//調(diào)用配置文件中的數(shù)據(jù)庫配置1
protected $connection = 'DB_CONFIG1';
//調(diào)用配置文件中的數(shù)據(jù)庫配置2
protected $connection = 'DB_CONFIG2';
如果采用的是M方法實例化模型的話,也可以支持傳入不同的數(shù)據(jù)庫連接信息,例如:
$User = M('User','other_','mysql://root:1234@localhost/demo');
表示實例化User模型,連接的是demo數(shù)據(jù)庫的other_user表,采用的連接信息是第三個參數(shù)配置的。如果我們在項目配置文件中已經(jīng)配置了DB_CONFIG2的話,也可以采用:
$User = M('User','other_','DB_CONFIG2');
如果你的個別數(shù)據(jù)表沒有定義任何前綴的話,可以在前綴參數(shù)中傳入NULL,例如:
$User = M('User',Null,'DB_CONFIG2');
表示實例化User模型,連接的是demo數(shù)據(jù)庫的user表。
需要注意的是,ThinkPHP的數(shù)據(jù)庫連接的惰性的,所以并不是在實例化的時候就連接數(shù)據(jù)庫,而是在有實際的數(shù)據(jù)操作的時候才會去連接數(shù)據(jù)庫(額外的情況是,在系統(tǒng)第一次實例化模型的時候,會自動連接數(shù)據(jù)庫獲取相關(guān)模型類對應(yīng)的數(shù)據(jù)表的字段信息)。
這個問題是需要你在建立數(shù)據(jù)庫的時候進行設(shè)置的。
我們用phpmyadmin的操作來解決它:
1、
用phpmyadmin打開你的數(shù)據(jù)庫,找到你的表test,打開打點擊打開,處于結(jié)構(gòu)狀態(tài);
2、
然后選擇編輯id這個字段,
3、
然后會看到這個字段里有如下屬性:字段
類型
長度/值
整理
屬性
Null
默認
額外
;
4、
我們需要設(shè)置的就在這個額外中,選擇下拉列表,里面只有一個選項:auto_imcrement,這就是自動累加的意思;
5、
執(zhí)行保存,OK,這回你再不給id這個字段進行賦值的時候,mysql會對這個字段進行自動累加。
字段(必填):就是自己起個字段名(列名),例如id,name等這樣的字符串.(注意:字段名不能相同).
類型(必選):這系統(tǒng)提供了很多。一般常用的也沒幾個
整型int,字符串型varchar,和char,還有浮點型double,文本text,時間timestamp.
長度值(建意給定長度):也就是給上面的類型中限定一個長度。比如varchar(30),int(6),在長度里直接寫整型的數(shù)值就行了.(時間類型不需要提供長度)。
整理(如果建庫已經(jīng)選好則不用選了。否則必選):(這個是數(shù)據(jù)表的字符集)這里基本上就兩個常用.(utf8_general_ci和gb2312_chinese_in)。
屬性:一般不選。(1二進制。2無符號整型,3無符號整型,不夠位數(shù)則補0,4在更新數(shù)據(jù)時,更新當前時間戳[基本上用于timestamp])
空:也就是這個字段的值是否可以為空.
auto_increment:自增長.一般主鍵會用且為整型時。
如果操作這個數(shù)據(jù)的人不多,并你進行長連接的連接資源使用很頻繁的話使用長連接。這樣速度比較快。
顧名思義,長連接就是一直連接從未斷開。你應(yīng)該清楚數(shù)據(jù)庫連接有的是限定連接個數(shù)的。你一直連接就占用了一個連接資源。如果連接這個數(shù)據(jù)庫的人不多的話,這樣沒問題,還能加快速度,你每次操作數(shù)據(jù)庫的時候不用在進行連接操作。這樣會加快效率。
如果這個數(shù)據(jù)庫使用的人比較多的話,最好使用短鏈接,這樣用完就釋放。不會一直占著連接資源。導(dǎo)致其他人想用都連接不上。
我說一下幾個步驟:
1、首先你得有一個存儲這些數(shù)據(jù)的數(shù)據(jù)庫表,比如數(shù)據(jù)庫表的結(jié)構(gòu)是這樣的。
數(shù)據(jù)庫表名為:user
字段:編號(id),姓名(name),手機(mobile),產(chǎn)品名稱(productName) 主鍵為id
2、實現(xiàn)你需要的功能:
第一步:你需要連接數(shù)據(jù)庫,有一個連接數(shù)據(jù)庫的文件:conn.php。內(nèi)容如下:
// 我假設(shè)你的數(shù)據(jù)庫是mysql的,假設(shè)你的數(shù)據(jù)庫用戶名為root,密碼為123456,根據(jù)你數(shù)據(jù)庫的實際情況改寫成你的。數(shù)據(jù)庫名稱假設(shè)為db_889888658
?php
$conn=mysql_connect("localhost","root","123456") or die("數(shù)據(jù)庫連接失敗,請檢查用戶名或密碼");
mysql_select_db("db_889888658",$conn);
mysql_query("SET NAMES 'gb2312'");
?
第二步:你需要一個添加數(shù)據(jù)的表單,就相當于一個注冊或添加數(shù)據(jù)的頁面。如文件為:add.html內(nèi)容如下:
form action="reg.php" method="post"
input type="text" name="name"br/
input type="text" name="mobile"br/
input type="text" name="productName"/br
input type="submit" name="submit" value="添加數(shù)據(jù)"
/form
第三步:寫一個處理你表單提交的數(shù)據(jù)的文件reg.php。內(nèi)容如下:
?php
include "conn.php";
if(isset($_POST["submit"])){
$name=$_POST["name"];
$mobile=$_POST["mobile"];
$productName=$_POST["productName"];
$sql="INSERT INTO 'user'(id,name,mobile,productName) VALUES (NULL,$name,$mobile,$productName)";
$query=mysql_query($sql);
$num=mysql_affected_rows($conn);
if($num=1){
echo "scriptalert('數(shù)據(jù)添加成功');location.href='add.html';/script";
}else{
echo "scriptalert('數(shù)據(jù)添加失敗');history.back();/script";
}
}
?
第四步,第三步已經(jīng)實現(xiàn)你說的第一個功能。下面說一下你的第二個功能。寫一個表單,輸入你要查詢的手機號,點擊“查詢”按鈕查詢你想要的字段。
?php
if($_POST["submit"]){
$mobile=$_POST["mobile"];
if(!empty($mobile)){
include "conn.php";
$sql="SELECT * FROM 'user' WHERE 'mobile'='$mobile'";
$query=mysql_query($sql);
while($rs=mysql_fetch_array($query)){
$str="查詢結(jié)果:br/";
$str.="用戶名:".$rs["name"]."?";
$str.="產(chǎn)品名:".$rs["name"]."?";
}
echo "您查詢的手機號為".$mobile."的數(shù)據(jù)信息如下:br/";
echo $str;
}else{
echo "請輸入手機號";
}
}
?
form action="" method="post"
請輸入您要查詢的手機號:input type="text" name="mobile" input type="submit" name="submit" value="查詢"
/form
1. mysql操作語句環(huán)境有兩種,1種是函數(shù)形式的,如mysql_query,另一種是面向?qū)ο笮问降娜?mysqli = new Mysqli($host,$username,$pwd);,第二種所有操作都是以php 面向?qū)ο蟮男问讲僮鱩ysql數(shù)據(jù)庫的。如mysqli-query('sql');等同于mysql_qeury('sql')
查看服務(wù)器是否開啟mysqli擴展的方式可以通過?php echo phpinfo() ?看是否存在mysqli擴展
2.獲取插入數(shù)據(jù)的id方法是mysql_insert_id($query);獲取mysqli-insert_id;要獲取插入數(shù)據(jù)id,id必須設(shè)置為自動增加模式(auto_increment).
$msyqli = new Mysqli($host,$user,$pwd);
$mysqli-select_db($dbname);
$mysqli-query('set names gbk');
$mysqli-query('insert into tb123(body)values("test")');
echo $mysql-insert_id;
$mysqli-close();
最后,請給點分數(shù),獎勵一下啊
分享題目:php數(shù)據(jù)庫額外屬性,php數(shù)據(jù)庫額外屬性有哪些
文章分享:http://chinadenli.net/article32/dsgocsc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機、網(wǎng)頁設(shè)計公司、面包屑導(dǎo)航、網(wǎng)站策劃、建站公司、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)