PHP/MySQL3日通-首天(二)
發(fā)表時(shí)間:2024-02-05 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]四、第一個(gè)腳本 如果我告訴您真正難過的一關(guān)已經(jīng)過了,您一定會(huì)很高興。軟件的安裝過程總是無(wú)法預(yù)料,因?yàn)橄到y(tǒng)跟系統(tǒng)之間可以說(shuō)是千差萬(wàn)別。不過您運(yùn)氣不錯(cuò),數(shù)據(jù)庫(kù)運(yùn)行起來(lái),PHP也編譯安裝完畢,Web服務(wù)器也可以正確處理擴(kuò)展名為.php3的文件了。 我們下面就開始正式上路,要寫第一個(gè)腳本程序了。創(chuàng)...
四、第一個(gè)腳本
如果我告訴您真正難過的一關(guān)已經(jīng)過了,您一定會(huì)很高興。軟件的安裝過程總是無(wú)法預(yù)料,因?yàn)橄到y(tǒng)跟系統(tǒng)之間可以說(shuō)是千差萬(wàn)別。不過您運(yùn)氣不錯(cuò),數(shù)據(jù)庫(kù)運(yùn)行起來(lái),PHP也編譯安裝完畢,Web服務(wù)器也可以正確處理擴(kuò)展名為.php3的文件了。
我們下面就開始正式上路,要寫第一個(gè)腳本程序了。創(chuàng)建一個(gè)文本文件,在其中加入下面的內(nèi)容:
現(xiàn)在,訪問相應(yīng)的URL,例如,http://myserver/test.php3。您應(yīng)該可以看到頁(yè)面中包含“Hello World”的文字。如果您看到的是錯(cuò)誤信息,查一下PHP文檔,看看軟件設(shè)置是否正確無(wú)誤。
就是這樣了!這是您的第一個(gè)PHP程序。如果您查看一下這個(gè)頁(yè)面的HTML源代碼,您會(huì)發(fā)現(xiàn)里面只有Hello World 這樣的文字。
那是因?yàn)镻HP引擎過濾了文件內(nèi)容,對(duì)其中的代碼作了處理,轉(zhuǎn)換成了標(biāo)準(zhǔn)的HTML。
在上面的程序中您最先注意到的可能是定界符,也就是以$#@60;?php開始的那幾行。這個(gè)標(biāo)記說(shuō)明后面是PHP代碼,而?$#@62;表示代碼結(jié)束。PHP的強(qiáng)大之處在于,這些代碼可以以多種不同方式放在任意位置 - 我是說(shuō)任意位置。后面我們會(huì)看到一些很有趣的例子,現(xiàn)在我們還是從最簡(jiǎn)單的開始。如果您愿意,也可以設(shè)置PHP,讓它使用短標(biāo)記,$#@60;?和?$#@62;,但這與XML會(huì)發(fā)生沖突,所以要小心使用。如果您是從ASP轉(zhuǎn)向PHP,您甚至可以讓PHP使用$#@60;%和%$#@62;作為定界符。
您還會(huì)注意到每行后面的分號(hào)。這些分號(hào)稱為分隔符,用于分隔不同的指令。您可以把所有的PHP代碼寫在一行里,用分隔符把命令分開。但是那樣看起來(lái)很亂,所以我們?cè)诿總(gè)分號(hào)后面都另起一行。記住,每行最后都要以分號(hào)結(jié)束。
最后,您會(huì)注意到myvar這個(gè)字以$符號(hào)開頭。這個(gè)符號(hào)告訴PHP,這是一個(gè)變量。我們把“Hello World”賦給變量$myvar。一個(gè)變量可以是數(shù)字,也可以是數(shù)組。不管怎樣,所有的變量都是以$符開頭。 <
PHP真正強(qiáng)大之處來(lái)源于它的函數(shù)。函數(shù),基本上是處理指令序列。如果您把所有的選件都編譯進(jìn)PHP,總共會(huì)有超過700個(gè)函數(shù)。這些函數(shù)可以讓您做很多事情。
現(xiàn)在我們?cè)偌舆M(jìn)一些MySQL的內(nèi)容進(jìn)去。
五、裝載數(shù)據(jù)庫(kù)
現(xiàn)在,我們要加入MySQL的內(nèi)容了。要想知道PHP中包含哪些選項(xiàng),或服務(wù)器方面的一些情況,一種簡(jiǎn)便的方法是使用函數(shù)phpinfo()。創(chuàng)建一個(gè)象下面這樣的程序:
| $#@60;html$#@62; $#@60;body$#@62;
$#@60;?php phpinfo(); ?$#@62;
$#@60;/body$#@62; $#@60;/html$#@62; |
保存這個(gè)程序,在瀏覽器中訪問這個(gè)文件。您會(huì)看到網(wǎng)頁(yè)中包含了一些有趣的、有用的信息,象這樣。這些信息是有關(guān)服務(wù)器、Web服務(wù)器內(nèi)部環(huán)境變量、PHP中包含的選項(xiàng),等等。在第一段Extensions中,找到以MySQL開頭的一行。如果沒有找到,那說(shuō)明MySQL支持選項(xiàng)并沒有編譯進(jìn)PHP。您可以再檢查一下安裝步驟,查閱一下PHP文檔,看您是否漏掉了什么。
如果找到了MySQL那一行,那您可以繼續(xù)了。
從MySQL數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)之前,我們得先往數(shù)據(jù)庫(kù)里放一些數(shù)據(jù)。在現(xiàn)在這一階段,還沒有一個(gè)簡(jiǎn)便的方法來(lái)做這件事情。大多數(shù)的PHP程序都帶有一個(gè)數(shù)據(jù)文件,該文件包含一些數(shù)據(jù)來(lái)創(chuàng)建并激活MySQL數(shù)據(jù)庫(kù)。這個(gè)過程不在本教程范圍之內(nèi),所以讓我來(lái)替您做這件事情吧。
MySQL使用它自己的用戶權(quán)限表。在安裝時(shí),會(huì)創(chuàng)建一個(gè)默認(rèn)的用戶(root),該用戶是沒有口令的。數(shù)據(jù)庫(kù)管理員可以根據(jù)需要來(lái)增加用戶并賦予用戶各種不同的權(quán)限,但這項(xiàng)工作完全可以另寫一本書了,所以我們只使用root用戶。如果您自己管理服務(wù)器和數(shù)據(jù)庫(kù),為root用戶分配一個(gè)口令是很重要的。
總之,我們還是接著說(shuō)數(shù)據(jù)庫(kù)吧。對(duì)Win32用戶來(lái)說(shuō),很對(duì)不起,不過您要在DOS下做些工作。您不得不使用DOS窗口,或者在“執(zhí)行”窗口中鍵入所有命令。別忘了,輸入命令時(shí)要帶上MySQL/bin的目錄名。Unix用戶可以在MySQL的bin目錄下輸入命令,但命令必須以./開頭,才能讓程序運(yùn)行起來(lái)。
我們要做的第一件事情是實(shí)際創(chuàng)建出數(shù)據(jù)庫(kù)。在命令行下,鍵入下列命令:
mysqladmin -u root create mydb
這樣就創(chuàng)建了一個(gè)名為“mydb”的數(shù)據(jù)庫(kù)。-u選項(xiàng)告訴MySQL我們使用的是root用戶。
下一步,我們要加入一些數(shù)據(jù),這里我們用的示例數(shù)據(jù)是大家都喜歡用的員工數(shù)據(jù)庫(kù)。我們將會(huì)用到我前面提到過的數(shù)據(jù)文件。如果您想在這方面多了解一些,可以查閱MySQL所帶的手冊(cè)或訪問 http://www.turbolift.com/mysql/網(wǎng)站。
把下面的文字復(fù)制到一個(gè)文件中,把該文件存在MySQL的bin目錄下(我假定文件名是mydb.dump)。
| CREATE TABLE employees ( id tinyint(4) DEFAULT 0 NOT NULL AUTO_INCREMENT, first varchar(20), last varchar(20), address varchar(255), position varchar(50), PRIMARY KEY (id), UNIQUE id (id));INSERT INTO employees VALUES (1,Bob,Smith, 128 Here St, Cityname,Marketing Manager);
INSERT INTO employees VALUES (2,John,Roberts,45 There St , Townville,Telephonist);
INSERT INTO employees VALUES (3,Brad,Johnson,1/34 Nowhere Blvd, Snowston,Doorman);
|
如果文字是折行的,請(qǐng)確保每一個(gè)INSERT語(yǔ)句都是另起一行的,F(xiàn)在,我們要把數(shù)據(jù)加入到mydb數(shù)據(jù)庫(kù)中了。在命令行下,鍵入下面的命令:
mysql -u root mydb $#@60; mydb.dump
此時(shí)您應(yīng)該不會(huì)遇到什么錯(cuò)誤。如果真的出錯(cuò)了,請(qǐng)仔細(xì)檢查一下是否因上面的文字折行而引起錯(cuò)誤。
六、測(cè)試
OK,現(xiàn)在我們已經(jīng)把數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)中了,F(xiàn)在我們來(lái)處理這些數(shù)據(jù)。把下面的文字存入一個(gè)文件中,把該文件存在Web服務(wù)器的文檔目錄下,后綴名為.php3。
| $#@60;html$#@62;
$#@60;body$#@62;
$#@60;?php
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
$result = mysql_query("SELECT * FROM employees",$db);
printf("First Name: %s$#@60;br$#@62;\n", mysql_result($result,0,"first"));
printf("Last Name: %s$#@60;br$#@62;\n", mysql_result($result,0,"last"));
printf("Address: %s$#@60;br$#@62;\n", mysql_result($result,0,"address"));
printf("Position: %s$#@60;br$#@62;\n", mysql_result($result,0,"position"));
?$#@62;
$#@60;/body$#@62;
$#@60;/html$#@62;
|
我來(lái)解釋一下上面的代碼。mysql_connect()函數(shù)負(fù)責(zé)以指定的用戶名(本例中用戶名是root)連接到指定機(jī)器(在本例中機(jī)器是本機(jī)localhost)上的MySQL數(shù)據(jù)庫(kù)。如果您想指定用戶口令,您也可以把它送給這個(gè)函數(shù)。連接的結(jié)果保存在變量$db中。
隨后,mysql_select_db()函數(shù)告訴PHP,我們要讀取的數(shù)據(jù)庫(kù)是mydb。我們可以在程序中同時(shí)連接到多臺(tái)機(jī)器上的多個(gè)數(shù)據(jù)庫(kù),但目前我們還是限于連接一個(gè)數(shù)據(jù)庫(kù)。
接下來(lái),mysql_query()函數(shù)完成最復(fù)雜的部分。利用剛才得到的連接結(jié)果標(biāo)識(shí),該函數(shù)把一行SQL語(yǔ)句送給MySQL服務(wù)器去處理。返回的結(jié)果保存在變量$result中。
最后,mysql_result()函數(shù)顯示SQL查詢命令所得到的各個(gè)字段的值。利用變量$result,我們就可以找到第一條記錄,記錄號(hào)是0,并將其中各字段的值顯示出來(lái)。
如果您以前沒用過Perl或C語(yǔ)言,那么printf函數(shù)的語(yǔ)法格式會(huì)顯得很奇怪。在上面的每一行程序中,%s代表表達(dá)式第二部分中的那個(gè)變量(例如,mysql_result($result,0,"position"))應(yīng)該以字符串的形式顯示出來(lái)。
這一課我們就講到這里了。我們已經(jīng)成功地編譯、安裝和設(shè)置了MySQL和PHP,并且運(yùn)行了一個(gè)簡(jiǎn)單的程序來(lái)讀取數(shù)據(jù)庫(kù)中的信息。在第二課里,我們會(huì)做一些更復(fù)雜的工作,來(lái)顯示多行記錄的數(shù)據(jù),甚至與數(shù)據(jù)庫(kù)互相交換數(shù)據(jù)。
繼續(xù)努力吧!