第一頁 PHP/MySQL簡介
您應該聽說過開放源代碼軟件(OSS),除非最近六到八個月來您一直住在火星上。這場運動有著巨大的沖擊力,已引起一些大公司的注意。象Oralce、Informix,還有多家公司都開始把他們的主力數據庫產品移植到OSS的產物之一 - Linux操作系統上。
如果您有足夠的技術力量,擁有一個復雜龐大的關系數據庫系統(RDBMS)則是如虎添翼。但是也許您對數據庫還剛剛入門,您剛剛讀了Jay的文章,決定自己也來搞一個數據驅動的網站。可是您也許會發現您缺乏必要的資源來運行ASP服務器或昂貴的數據庫系統(您也不需要這些東西)。您需要一些免費的、支持Unix的東西。
那麼我建議您使用PHP和MySQL。這兩樣東西加在一起,對於開發數據驅動的網站這項工作而言,真是最佳組合。其實用不著我多費唇舌解釋。一項由Netcraft組織的非官方調查顯示,應用PHP的主機數目由1998年6月的7,500台躍升至1999年3月的410,000台。不錯吧?這兩種軟件的組合還在Webcon98大會上贏得了年度數據庫產品大獎,還得了一座漂亮的獎杯。
MySQL是一個小巧靈珑的數據庫服務器軟件,對於小型(當然也不一定很小)應用系統是非常理想的。除了支持標准的ANSI SQL語句,它還支持多種平台,而在Unix系統上該軟件支持多線程運行方式,從而能獲得相當好的性能。對於不使用Unix的用戶,它可以在Windows NT系統上以系統服務方式運行,或者在Windows 95/98系統上以普通進程方式運行。
PHP是一種服務器端解釋的腳本語言。如果你接觸過ASP的話,那麼您對於在HTML頁面中嵌入代碼應該是比較熟悉了。PHP代碼在服務器一端被解釋轉變成普通的HTML頁面內容,送給浏覽器一端。這種模式使得我們可以用它來完成相當復雜的功能。
除了免費這一點(當然,MySQL也有一些使用許可方面的限制),PHP-MySQL的組合還可以跨平台運行,這意味著您可以在Windows上開發,然後在Unix平台上運行。另外,PHP也能作為標准的CGI進程來運行,此時它是一個獨立的腳本解釋器,或者是Apache的一個嵌入模塊。
如果您有興趣使用其他數據庫服務器的話,PHP也支持Informix、Oracle、Sybase、Solid和PostgreSQL ,以及通用的ODBC。
PHP支持Internet開發的一些前沿技術。這些技術包括身份認證、XML、動態圖象生成、WDDX、共享內存,以及動態PDF文檔等等,不一而足。如果您還不滿意的話,PHP是很容易擴展的,所以只要您有編程能力,您盡可以自己大展身手一番。
最後要說的是,兩種軟件都是大量程序員協同開發的,因此文檔及郵件列表等支持方式很多。程序錯誤的修正很快,而如果您要求加入新功能的話,總會有人考慮您的要求,並且在可行性足夠高的前提下加以實現。
說得夠多了!我們來看看這篇教程裡都有些什麼內容吧。
第一課講的是在Unix和Windows環境下安裝這兩個軟件。如果您不太關心這個問題(也許您是在ISP的服務器上開發),您可以直接跳到第一個示例程序,從那裡開始您的奇妙之旅。
在第二課裡,我們要學習一些更加復雜的腳本功能,比如循環、處理用戶輸入,以及與數據庫交換數據等等。
第三課要講的是確認功能,以及如何使您的腳本程序清晰簡練。
我們開始吧。
第四頁 第一個腳本
如果我告訴您真正難過的一關已經過了,您一定會很高興。軟件的安裝過程總是無法預料,因為系統跟系統之間可以說是千差萬別。不過您運氣不錯,數據庫運行起來,PHP也編譯安裝完畢,Web服務器也可以正確處理擴展名為.php3的文件了。
我們下面就開始正式上路,要寫第一個腳本程序了。創建一個文本文件,在其中加入下面的內容:
復制代碼 代碼如下:
<html>
<body>
<?php
$myvar = "Hello World";
echo $myvar;
?>
</body>
</html>
現在,訪問相應的URL,例如,http://myserver/test.php3。您應該可以看到頁面中包含“Hello World”的文字。如果您看到的是錯誤信息,查一下PHP文檔,看看軟件設置是否正確無誤。
就是這樣了!這是您的第一個PHP程序。如果您查看一下這個頁面的HTML源代碼,您會發現裡面只有Hello World 這樣的文字。
那是因為PHP引擎過濾了文件內容,對其中的代碼作了處理,轉換成了標准的HTML。
在上面的程序中您最先注意到的可能是定界符,也就是以<?php開始的那幾行。這個標記說明後面是PHP代碼,而?>表示代碼結束。PHP的強大之處在於,這些代碼可以以多種不同方式放在任意位置 - 我是說任意位置。後面我們會看到一些很有趣的例子,現在我們還是從最簡單的開始。如果您願意,也可以設置PHP,讓它使用短標記,<?和?>,但這與XML會發生沖突,所以要小心使用。如果您是從ASP轉向PHP,您甚至可以讓PHP使用<%和%>作為定界符。
您還會注意到每行後面的分號。這些分號稱為分隔符,用於分隔不同的指令。您可以把所有的PHP代碼寫在一行裡,用分隔符把命令分開。但是那樣看起來很亂,所以我們在每個分號後面都另起一行。記住,每行最後都要以分號結束。
最後,您會注意到myvar這個字以$符號開頭。這個符號告訴PHP,這是一個變量。我們把“Hello World”賦給變量$myvar。一個變量可以是數字,也可以是數組。不管怎樣,所有的變量都是以$符開頭。
PHP真正強大之處來源於它的函數。函數,基本上是處理指令序列。如果您把所有的選件都編譯進PHP,總共會有超過700個函數。這些函數可以讓您做很多事情。
現在我們再加進一些MySQL的內容進去。
第五頁 裝載數據庫
現在,我們要加入MySQL的內容了。要想知道PHP中包含哪些選項,或服務器方面的一些情況,一種簡便的方法是使用函數phpinfo()。創建一個象下面這樣的程序:
復制代碼 代碼如下:
<html>
<body>
<?php
phpinfo();
?>
</body>
</html>
保存這個程序,在浏覽器中訪問這個文件。您會看到網頁中包含了一些有趣的、有用的信息,象這樣。這些信息是有關服務器、Web服務器內部環境變量、PHP中包含的選項,等等。在第一段Extensions中,找到以MySQL開頭的一行。如果沒有找到,那說明MySQL支持選項並沒有編譯進PHP。您可以再檢查一下安裝步驟,查閱一下PHP文檔,看您是否漏掉了什麼。
如果找到了MySQL那一行,那您可以繼續了。
從MySQL數據庫中讀取數據之前,我們得先往數據庫裡放一些數據。在現在這一階段,還沒有一個簡便的方法來做這件事情。大多數的PHP程序都帶有一個數據文件,該文件包含一些數據來創建並激活MySQL數據庫。這個過程不在本教程范圍之內,所以讓我來替您做這件事情吧。
MySQL使用它自己的用戶權限表。在安裝時,會創建一個默認的用戶(root),該用戶是沒有口令的。數據庫管理員可以根據需要來增加用戶並賦予用戶各種不同的權限,但這項工作完全可以另寫一本書了,所以我們只使用root用戶。如果您自己管理服務器和數據庫,為root用戶分配一個口令是很重要的。
總之,我們還是接著說數據庫吧。對Win32用戶來說,很對不起,不過您要在DOS下做些工作。您不得不使用DOS窗口,或者在“執行”窗口中鍵入所有命令。別忘了,輸入命令時要帶上MySQL/bin的目錄名。Unix用戶可以在MySQL的bin目錄下輸入命令,但命令必須以./開頭,才能讓程序運行起來。
我們要做的第一件事情是實際創建出數據庫。在命令行下,鍵入下列命令:
mysqladmin -u root create mydb
這樣就創建了一個名為“mydb”的數據庫。-u選項告訴MySQL我們使用的是root用戶。
下一步,我們要加入一些數據,這裡我們用的示例數據是大家都喜歡用的員工數據庫。我們將會用到我前面提到過的數據文件。如果您想在這方面多了解一些,可以查閱MySQL所帶的手冊或訪問 http://www.turbolift.com/mysql/網站。
把下面的文字復制到一個文件中,把該文件存在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');
如果文字是折行的,請確保每一個INSERT語句都是另起一行的。現在,我們要把數據加入到mydb數據庫中了。在命令行下,鍵入下面的命令:
mysql -u root mydb < mydb.dump
此時您應該不會遇到什麼錯誤。如果真的出錯了,請仔細檢查一下是否因上面的文字折行而引起錯誤。
net 第六頁 測試
OK,現在我們已經把數據導入到數據庫中了。現在我們來處理這些數據。把下面的文字存入一個文件中,把該文件存在Web服務器的文檔目錄下,後綴名為.php3。
復制代碼 代碼如下:
<html>
<body>
<?php
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
$result = mysql_query("SELECT * FROM employees",$db);
printf("First Name: %s<br>n", mysql_result($result,0,"first"));
printf("Last Name: %s<br>n", mysql_result($result,0,"last"));
printf("Address: %s<br>n", mysql_result($result,0,"address"));
printf("Position: %s<br>n", mysql_result($result,0,"position"));
?>
</body>
</html>
我來解釋一下上面的代碼。mysql_connect()函數負責以指定的用戶名(本例中用戶名是root)連接到指定機器(在本例中機器是本機localhost)上的MySQL數據庫。如果您想指定用戶口令,您也可以把它送給這個函數。連接的結果保存在變量$db中。
隨後,mysql_select_db()函數告訴PHP,我們要讀取的數據庫是mydb。我們可以在程序中同時連接到多台機器上的多個數據庫,但目前我們還是限於連接一個數據庫。
接下來,mysql_query()函數完成最復雜的部分。利用剛才得到的連接結果標識,該函數把一行SQL語句送給MySQL服務器去處理。返回的結果保存在變量$result中。
最後,mysql_result()函數顯示SQL查詢命令所得到的各個字段的值。利用變量$result,我們就可以找到第一條記錄,記錄號是0,並將其中各字段的值顯示出來。
如果您以前沒用過Perl或C語言,那麼printf函數的語法格式會顯得很奇怪。在上面的每一行程序中,%s代表表達式第二部分中的那個變量(例如,mysql_result($result,0,"position"))應該以字符串的形式顯示出來。想更深入了解printf,請參閱PHP文檔。
這一課我們就講到這裡了。我們已經成功地編譯、安裝和設置了MySQL和PHP,並且運行了一個簡單的程序來讀取數據庫中的信息。在 第二課裡,我們會做一些更復雜的工作,來顯示多行記錄的數據,甚至與數據庫互相交換數據。