在PHP網(wǎng)頁(yè)中創(chuàng)建MySQL連接非常簡(jiǎn)單,僅需一行指令即可,如下所示:
$link = mysql_connect(’數(shù)據(jù)庫(kù)所在位置’, ’數(shù)據(jù)庫(kù)賬號(hào)’, ’數(shù)據(jù)庫(kù)密碼’);
例如,要連接本機(jī)MySQL數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)賬號(hào)為root,數(shù)據(jù)庫(kù)密碼為123456,則連接指令如下:
$link = mysql_connect(’localhost’, ’root’, ’123456’);
這個(gè)$link變量便是通過(guò)創(chuàng)建完成的數(shù)據(jù)庫(kù)進(jìn)行連接的,如果執(zhí)行數(shù)據(jù)庫(kù)查詢指令,此變量相當(dāng)重要。
為了避免可能出現(xiàn)的錯(cuò)誤(如數(shù)據(jù)庫(kù)未啟動(dòng)、連接端口被占用等問(wèn)題),這個(gè)指令最好加上如下的錯(cuò)誤處理機(jī)制:
$link = mysql_connect('localhost', 'root', '123456')
or die("Could not connect : " . mysql_error());
如果連接失敗,便會(huì)在瀏覽器上出現(xiàn)“Could not connect”字樣,以告知用戶錯(cuò)誤信息。
重點(diǎn)整理
在PHP網(wǎng)頁(yè)中創(chuàng)建MySQL連接非常簡(jiǎn)單,僅需以下的指令:
$link = mysql_connect('數(shù)據(jù)庫(kù)所在位置', '數(shù)據(jù)庫(kù)賬號(hào)', '數(shù)據(jù)庫(kù)密碼');
數(shù)據(jù)庫(kù)選用
在一套MySQL數(shù)據(jù)庫(kù)中,可以容納許多數(shù)據(jù)庫(kù)并存,但每次操作均只能對(duì)單一數(shù)據(jù)庫(kù)進(jìn)行。因此在連接創(chuàng)建完成后,便需選用要操作的數(shù)據(jù)庫(kù)。
選用數(shù)據(jù)庫(kù)指令如下,在此以選用mysql數(shù)據(jù)庫(kù)為例:
mysql_query("use mysql");
也可以使用專門的API指令:
mysql_select_db("mysql") or die("Could not select database");
這兩個(gè)指令都是選用mysql數(shù)據(jù)庫(kù)為欲操作的數(shù)據(jù)庫(kù)。
重點(diǎn)整理
選用數(shù)據(jù)庫(kù)指令如下,可以使用:mysql_query("use mysql");
也可以使用專門的API來(lái)下指令:mysql_select_db("mysql");
執(zhí)行SQL指令
在選用數(shù)據(jù)庫(kù)后,便可進(jìn)行SQL指令的操作,以下的范例是通過(guò)PHP程序?qū)ysql數(shù)據(jù)庫(kù)執(zhí)行 "select * from user" 這段SQL指令的語(yǔ)句:
$result = mysql_query("select * from user",$link);
其中,$result變量將存儲(chǔ)查詢后的結(jié)果,而mysql_query()函數(shù)即是查詢指令專用的函數(shù),至少需要傳入兩個(gè)參數(shù),分別是SQL語(yǔ)句與SQL連接。在此SQL語(yǔ)句為:"select * from user",SQL連接為之前所建立的$link。
如果想把SQL查詢子句分開(kāi)寫以增強(qiáng)程序的可讀性,也可這樣寫,意義與功能完全相同。
$sqlstr="select * from user";
$result = mysql_query($sqlstr,$link);
如果采用第二種寫法,更改SQL指令時(shí),僅需更改$sqlstr參數(shù)的內(nèi)容,即可改變SQL指令。
在查詢時(shí),為避免可能出現(xiàn)的錯(cuò)誤,這個(gè)指令最好加上如下的錯(cuò)誤處理機(jī)制:
$sqlstr="select * from user";
$result = mysql_query($sqlstr) or die("Query failed : " . mysql_error());
重點(diǎn)整理
進(jìn)行SQL指令的操作,對(duì)mysql數(shù)據(jù)庫(kù)執(zhí)行"select*from user" 這段SQL指令的語(yǔ)句:
$result=mysql_query("select*fromuser",$link);
分析表頭
在MySQL執(zhí)行完前面的mysql指令之后,接下來(lái)要做的便是分析所返回的數(shù)據(jù)。
而分析所返回的數(shù)據(jù)分成兩個(gè)部分:其一為分析表頭,也就是分析所返回?cái)?shù)據(jù)的字段名稱;其二為分析表身,也就是分析返回的數(shù)據(jù)內(nèi)容。
表頭數(shù)據(jù)就是字段名稱,不見(jiàn)得一定要分析,通常在顯示完整表格、查找字段對(duì)應(yīng)關(guān)系時(shí)才會(huì)進(jìn)行分析。以u(píng)ser表格為例,表頭數(shù)據(jù)便是“Host”、“User”、“Password”等字段名稱。
根據(jù)SQL查詢子句的不同,所返回的表頭字段數(shù)也不同,因此通常以while指令進(jìn)行分析。以下的例子是以php的while指令配合mysql_fetch_field()函數(shù)分析表頭,并顯示在表格的一行中:
while ($field = mysql_fetch_field($result)) {
echo "<td>".$field->name."</td>\n";
}
echo "</tr>\n";
在這個(gè)范例中,mysql_fetch_field()函數(shù)必須傳入$result查詢結(jié)果變量,所創(chuàng)建的每個(gè)$field變量便代表一個(gè)字段。每個(gè)字段都有數(shù)種屬性(名稱、長(zhǎng)度、類型等),在此我們通過(guò)->操作符,取得 $field->name 這個(gè)字段名稱屬性,并通過(guò) echo 指令顯示出來(lái)。
重點(diǎn)整理
分析所返回的數(shù)據(jù)分成兩個(gè)部分:其一為分析表頭,其二為分析表身。
分析表頭使用mysql_fetch_field()函數(shù)必須傳入$result查詢結(jié)果變量,再通過(guò)->操作符,取得 $field->name 這個(gè)字段名稱屬性。
分析表身
表身便是返回?cái)?shù)據(jù)的實(shí)際內(nèi)容,以u(píng)ser表格為例,表身數(shù)據(jù)便是“l(fā)ocalhost”、“root”等表格實(shí)際內(nèi)容,在范例中,我們將表身內(nèi)容以表格方式全部顯示出來(lái),程序代碼如下:
while ($row = mysql_fetch_row($result)) {
echo "<tr>\n";
for($i=0;$i<count($row);$i++){
echo "<td>".$row[$i]."</td>";
}
echo "</tr>\n";
}
與表頭數(shù)據(jù)相同,因返回?cái)?shù)據(jù)條數(shù)不定,因此亦需使用while指令進(jìn)行分析。其中mysql_fetch_row()函數(shù)需傳入$result數(shù)據(jù)。
經(jīng)過(guò)分析后,所返回的$row是一個(gè)一維數(shù)組變量,存儲(chǔ)每一行所有的數(shù)據(jù)字段。再通過(guò)for循環(huán),并配合count()函數(shù)計(jì)算數(shù)據(jù)行中的列數(shù),將$row數(shù)組中每一元素顯示出來(lái)。
當(dāng)然,也可根據(jù)需要,取出單一目標(biāo)字段進(jìn)行分析,如賬號(hào)密碼比較等。
重點(diǎn)整理
分析表頭使用mysql_fetch_row()函數(shù),必須傳入$result查詢結(jié)果變量,再通過(guò)for循環(huán),并配合count()函數(shù)計(jì)算數(shù)據(jù)行中的列數(shù),將$row數(shù)組中每一元素顯示出來(lái)。
釋放資源
完成SQL操作后,必須釋放所建立的連接資源,以免過(guò)多的連接占用造成系統(tǒng)性能的下降。釋放資源指令如下:
mysql_free_result($result);
mysql_close($link);
在這兩行語(yǔ)句中,第一行釋放了$result這個(gè)變量,第二行指令關(guān)閉與數(shù)據(jù)庫(kù)的連接$link,以釋放所占用的存儲(chǔ)器空間與數(shù)據(jù)庫(kù)連接。
重點(diǎn)整理
釋放資源指令:
mysql_free_result($result);
mysql_close($link);