十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專(zhuān)業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
PHP鏈接數(shù)據(jù)庫(kù)有幾種方式
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到啟東網(wǎng)站設(shè)計(jì)與啟東網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類(lèi)型包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋啟東地區(qū)。
mysqli:
?php
$servername = "localhost";
$username = "username";
$password = "password";
// 創(chuàng)建連接
$conn = new mysqli($servername, $username, $password);
// 檢測(cè)連接
if ($conn-connect_error) {
die("連接失敗: " . $conn-connect_error);
}
echo "連接成功";
?
也可以使用PDO進(jìn)行鏈接,前提是你必須在php.ini中開(kāi)啟PDO:
?php
$servername = "localhost";
$username = "username";
$password = "password";
try {
$conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
echo "連接成功";
}
catch(PDOException $e)
{
echo $e-getMessage();
}
?
建議使用PDO,功能更加強(qiáng)大,兼容各種數(shù)據(jù)庫(kù)
關(guān)于這個(gè)問(wèn)題,差不多就是這個(gè)樣子的了,你如果不明白,可以自己去后盾瞅瞅,我這些都是在后盾上學(xué)的,有空可以去看一下,就算不喜歡也沒(méi)關(guān)系啊,何樂(lè)而不為呢?
在mysql數(shù)據(jù)庫(kù)中,創(chuàng)建一個(gè)test數(shù)據(jù)庫(kù),用于測(cè)試。
請(qǐng)點(diǎn)擊輸入圖片描述
新建一個(gè)php文件,命名為test.php,用于講解php如何選擇要操作的數(shù)據(jù)庫(kù)。
請(qǐng)點(diǎn)擊輸入圖片描述
在test.php文件中,使用header()方法將頁(yè)面的編碼格式設(shè)置為utf-8,避免輸出中文亂碼。
請(qǐng)點(diǎn)擊輸入圖片描述
在test.php文件中,使用mysql_connect()函數(shù),通過(guò)賬號(hào)和密碼創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)的連接。
請(qǐng)點(diǎn)擊輸入圖片描述
在test.php文件中,再使用mysql_select_db()函數(shù)選擇要操作的數(shù)據(jù)庫(kù)test,選擇數(shù)據(jù)庫(kù)成功,則返回true,否則,返回false。最后,通過(guò)if語(yǔ)句判斷結(jié)果。
請(qǐng)點(diǎn)擊輸入圖片描述
在瀏覽器打開(kāi)test.php文件,查看結(jié)果。
請(qǐng)點(diǎn)擊輸入圖片描述
END
總結(jié):
1、創(chuàng)建一個(gè)test數(shù)據(jù)庫(kù)。
2、使用mysql_connect()函數(shù)創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)的連接。
3、再使用mysql_select_db()函數(shù)選擇要操作的數(shù)據(jù)庫(kù)test,并通過(guò)if語(yǔ)句判斷結(jié)果。
1.鏈接數(shù)據(jù)庫(kù)所在的服務(wù)器 mysql_connect 如:mysql_connect("127.0.0.1","root","111111") or die("未能鏈接上");
2.選擇數(shù)據(jù)庫(kù) mysql_select _db($db) or die("數(shù)據(jù)庫(kù)鏈接錯(cuò)誤!")
3.建立資源標(biāo)識(shí)符 $r= mysql_query($sql)
4.讀出 mysql_fetch_rows($r),mysql_fetch_assoc($r)
如:if(mysql_num_rows($r)0){
while($rows=mysql_fetch_assoc($r)){
echo $rows["id"]."-".$rows["name"];
}
}
5.釋放資源 mysql_query($r);
此類(lèi)庫(kù)簡(jiǎn)單、易用,便于你自己修改和對(duì)功能的改善,能解決大部分
PHP
項(xiàng)目中執(zhí)行的
SQL
操作。
初步工作
首先,請(qǐng)大家下載這個(gè)類(lèi)庫(kù)
M.class.php 再下載一個(gè)
Mysqli
連接數(shù)據(jù)庫(kù)的類(lèi)庫(kù)
MysqliDb.class.php(打包下載地址)
新建一個(gè)
includes
的文件夾,將下載下來(lái)的兩個(gè)
class
文件,放進(jìn)去。
然后,請(qǐng)你在項(xiàng)目下創(chuàng)建一個(gè)
test.php
文件。注:UTF-8
文件格式
請(qǐng)先根據(jù)你機(jī)器的情況,填充以下代碼,用于連接數(shù)據(jù)庫(kù):
復(fù)制代碼
代碼如下:
header('Content-Type:text/html;Charset=utf-8');
define('ROOT_PATH',
dirname(__FILE__));
define('DB_HOST',
'localhost');
//數(shù)據(jù)庫(kù)服務(wù)器地址
define('DB_USER',
'root');
//數(shù)據(jù)庫(kù)用戶名
define('DB_PWD',
'×××');//數(shù)據(jù)庫(kù)密碼
define('DB_NAME',
'×××');
//數(shù)據(jù)庫(kù)名稱(chēng)
define('DB_PORT',
'3306');
//數(shù)據(jù)庫(kù)端口
function
__autoload($className)
{
require_once
ROOT_PATH
.
'/includes/'.
ucfirst($className)
.'.class.php';
//自動(dòng)加載
class
文件
}
好了,上面的這些操作都是初步工作,下面正式進(jìn)入類(lèi)庫(kù)的講解。
類(lèi)庫(kù)講解
首先,我們得實(shí)例化
M.class.php,實(shí)例化很簡(jiǎn)單:
復(fù)制代碼
代碼如下:
$m
=
new
M();
//這步操作代表
M.class.php
中的所有功能都封裝在了變量
$m
中
注:
1、M類(lèi)庫(kù)中的方法參數(shù)說(shuō)明,請(qǐng)到
M.class.php
文件中看詳細(xì)的注釋?zhuān)@里不再進(jìn)行敘述。建議在學(xué)習(xí)的時(shí)候,對(duì)照著看下文件中的參數(shù)即注釋。
2、講解代碼中用到的數(shù)據(jù)庫(kù)結(jié)構(gòu)為:
復(fù)制代碼
代碼如下:
CREATE
TABLE
`user`
(
`id`
int(8)
unsigned
NOT
NULL
auto_increment,
`name`
varchar(50)
default
NULL,
`email`
varchar(100)
default
NULL,
`age`
smallint(3)
default
NULL,
`class_id`
int(8)
default
NULL,
`commit_time`
int(10)
default
NULL,
PRIMARY
KEY
(`id`),
KEY
`name`
(`name`)
)
ENGINE=MyISAM
DEFAULT
CHARSET=utf8
復(fù)制代碼
代碼如下:
CREATE
TABLE
`class`
(
`class_id`
int(8)
NOT
NULL
auto_increment,
`class_name`
varchar(100)
default
NULL,
PRIMARY
KEY
(`class_id`)
)
ENGINE=InnoDB
DEFAULT
CHARSET=utf8
并添加一條測(cè)試數(shù)據(jù)。
3、M類(lèi)庫(kù)中,大部分方法都分兩中類(lèi)型,即:SQL方法;拼接方法,具體在實(shí)例中可以看出
4、以下稱(chēng)述中的
M
為
M.class.php
文件
方法1、Insert()
添加數(shù)據(jù)
Insert
方法的全部使用案例如下:
復(fù)制代碼
代碼如下:
$m-Insert("user",
null,
array('焦焦',
'liruxing1715@sina.com',
'23',
time()));
//
拼接方法:往`user`表中添加一條數(shù)據(jù),返回值為數(shù)據(jù)庫(kù)影響的行數(shù)
$m-Insert("user",
null,
array('焦焦',
'liruxing1715@sina.com',
'23',
time()),
true);
//
功能同上,返回
last_insert_id(插入的增長(zhǎng)id)
$m-Insert("INSERT
INTO
`user`
(`name`,
`email`,
`age`,
`commit_time`)
VALUES
('張小花',
'zhangxiaohua@sina.com.cn',
'22',
'".time()."')");
//SQL方法,返回值為數(shù)據(jù)庫(kù)影響的行數(shù)
$m-Insert("INSERT
INTO
`user`
(`name`,
`email`,
`age`,
`commit_time`)
VALUES
('張小花',
'zhangxiaohua@sina.com.cn',
'22',
'".time()."')",
true);
//
同上,返回
last_insert_id
注:Insert
方法中的第二個(gè)參數(shù)若為null,可自動(dòng)獲得插入表除
auto_increment
字段之外的所有字段,詳情請(qǐng)看M源文件;若要返回值為最后插入的
ID,那么請(qǐng)?jiān)O(shè)置
Insert
方法的最后一個(gè)參數(shù)為
true(默認(rèn)是false);
方法2、Update()
修改數(shù)據(jù)
update
方法的全部使用案例如下:
復(fù)制代碼
代碼如下:
$m-Update("user",
array('name'='李茹茹',
'age'=24),
"id=1");
//拼接方法,修改id為1的數(shù)據(jù)的名稱(chēng)為“李茹茹”;年齡為“24”,其方法的返回值為受影響的行數(shù)
$m-Update("UPDATE
`user`
SET
`name`='李茹茹',
`age`=24
WHERE
id
=
1");
//SQL
用法,功能同上
方法3、Del()
刪除數(shù)據(jù)
Del
方法的全部使用案例如下:
復(fù)制代碼
代碼如下:
$m-Del('user',
'id=3');
//拼接方法:刪除`user`表中
id
為3的數(shù)據(jù),返回受影響的行數(shù)
$m-Del("DELETE
FROM
`user`
WHERE
id=4");
//SQL方法:刪除`user`表中
id
為4的數(shù)據(jù),返回受影響的行數(shù)
$m-Del("DELETE
FROM
`user`
WHERE
id
in
(10,
11,
12)");
//SQL方法:刪除多條數(shù)據(jù),刪除`user`表中
id
為
10、11、12
的數(shù)據(jù),返回受影響的行數(shù)
方法4、Total()
獲取記錄數(shù),返回值都為int
Del
方法的全部使用案例如下:
復(fù)制代碼
代碼如下:
$m-Total('user');
//拼接方法:返回
`user`表中的記錄數(shù),無(wú)條件
$m-Total('user',
'id1');
//拼接方法:返回
`user`表中
id
大于1的記錄數(shù),有條件
$m-Total("SELECT
COUNT(*)
AS
total
FROM
`user`");
//SQL方法,注:使用SQL方法,語(yǔ)句中必須使用
"AS
total",否則會(huì)報(bào)錯(cuò)
方法5、IsExists()
檢查數(shù)據(jù)是否存在,返回值為boolean
復(fù)制代碼
代碼如下:
$m-IsExists('user',
"`name`='焦焦'");
//拼接方法:返回`user`表中是否存在`name`為“焦焦”的數(shù)據(jù),返回true,若不存在,返回false
方法6、InsertId()
獲取表下一個(gè)添加的自動(dòng)增長(zhǎng)id,注意,這里不進(jìn)行添加操作,只是獲取下一個(gè)增長(zhǎng)id
復(fù)制代碼
代碼如下:
echo
$m-InsertId('user');
//獲取`user`
表下一個(gè)添加的自動(dòng)增長(zhǎng)id
方法7、GetRow()
返回單條數(shù)據(jù),返回值為一維數(shù)組
GetRow
方法的全部使用案例如下:
復(fù)制代碼
代碼如下:
$data
=
$m-GetRow("SELECT
`name`,email
FROM
`user`
WHERE
id=1");
//SQL方法,返回一維數(shù)組,例如:Array
(
[name]
=
焦焦
[email]
=
liruxing1715@sina.com
)
$data
=
$m-GetRow("SELECT
u.`name`,
u.email,
c.class_name
FROM
`user`
u,
`class`
c
WHERE
u.class_id=c.class_id
AND
u.id=1");
//SQL方法,多表查詢(xún)
$data
=
$m-GetRow('user',
'`name`,email',
"id=1");
//拼接方法
$data
=
$m-GetRow('user
as
u,`class`
c',
'u.`name`,u.email,c.class_name',
"u.id=1
AND
u.class_id=c.class_id");
//拼接方法,多表查詢(xún)
$data
=
$m-GetRow("SELECT
`name`,email
FROM
`user`");
//如果沒(méi)有指定條件應(yīng)該是顯示全部信息,但是在此方法中將默認(rèn)顯示第一條(不推薦這么使用?。。。?/p>
$data
是查詢(xún)出來(lái)的一維數(shù)組。
方法8、GetOne()
返回單個(gè)數(shù)據(jù)
GetOne
方法的全部使用案例如下:
復(fù)制代碼
代碼如下:
$name
=
$m-GetOne("SELECT
`name`
FROM
`user`
WHERE
id=1");
//SQL方法,返回一個(gè)字符串,例如:焦焦
$name
=
$m-GetOne("user",
"name",
"id=1");
//拼接方法,返回一個(gè)字符串,例如:焦焦
方法9、FetchAll()
返回所有記錄
復(fù)制代碼
代碼如下:
$data
=
$m-FetchAll("user");
//返回`user`表中的所有記錄,以二維數(shù)組的形式
$data
=
$m-FetchAll("SELECT
*
FROM
`user`");
//SQL
方法,功能和返回值同上
$data
=
$m-FetchAll("user",
"name,email",
"id1",
'id
DESC',
'2');
//返回兩條id1的數(shù)據(jù),只顯示name,email,并且以id
為倒序排序。注:請(qǐng)注意該方法的最后一個(gè)參數(shù)也可以為'0,2',目的是為分頁(yè)準(zhǔn)備的,如果第一頁(yè)為'0,2'的話,那么第二頁(yè)就是'2,2'
//該方法也支持聯(lián)表查詢(xún)和多表查詢(xún),下面以聯(lián)表查詢(xún)?yōu)槔?/p>
$data
=
$m-FetchAll("`user`
as
u
LEFT
JOIN
`class`
as
c
ON
u.class_id=c.class_id",
"u.`name`,u.email,
c.class_name",
"u.id=1");
//注意:該拼接方法中,ON
添加的位置
注:對(duì)于該
FetchAll
方法,后續(xù)我會(huì)寫(xiě)一篇使用該方法進(jìn)行完美分頁(yè)的文章??!請(qǐng)關(guān)注。
方法10、MultiQuery()
執(zhí)行多條SQL語(yǔ)句
復(fù)制代碼
代碼如下:
$sql
=
"INSERT
INTO
user
(`name`,email,
age,
class_id,
commit_time)
VALUES
('賈花花',
'jiahuahua@sina.com.cn',
'22',
'1',
'".time()."')";
//添加一個(gè)名叫“賈花花”的學(xué)生信息
$sql
.=
";DELETE
FROM
`user`
WHERE
`name`='焦焦'";
//刪除一條名叫“焦焦”的學(xué)生信息
//解釋?zhuān)?sql
是多條
SQL
以英文;(分號(hào))拼接起來(lái)的
$data
=
$m-MultiQuery($sql);
//返回為true,代表執(zhí)行成功;為false,代表執(zhí)行失敗
類(lèi)庫(kù)講解完畢
到此該類(lèi)庫(kù)的全部功能就講解完畢,希望你能多看看M文件,了解其內(nèi)部運(yùn)行的機(jī)制。M
文件不會(huì)存在執(zhí)行緩慢情況,請(qǐng)大家放心使用。
如果在使用過(guò)程中出現(xiàn)
SQL
拼接錯(cuò)誤,類(lèi)庫(kù)會(huì)報(bào)出友善的錯(cuò)誤提示。
有問(wèn)題請(qǐng)留言,歡迎大家的批評(píng)和建議,加油!學(xué)習(xí)好運(yùn)。