資料庫連結
10. PHP最大的特色就是操作資料庫的能力特別的強大,PHP提供對多種資料庫的支援。
通過PHP你可以輕鬆的串連到資料庫,請求資料並將其顯示在你的web網站中,甚至修改資料庫中的資料。在這一節裡我們主要以在互連網上跟PHP一起使用得最多的MySQL資料庫為例,介紹一下相關的MySQL資料庫的操作函數以及資料庫的基本操作等方面的知識。
在MySQL資料庫中,我們用來串連資料庫的函數有兩個,它們分別為:
integer mysql_connect(string host,string user,string password);
integer mysql_pconnect(string host,string user,string password);
mysql_connect函數和mysql_pconnect函數都是對指定主機上MySQL資料庫的串連,如果該資料庫位於一個不同的連接埠,則可以在主機名稱後加上冒號和連接埠號碼。函數的參數也可以預設不填,如果不填參數,預設的主機名稱是“localhost”,使用者名稱為資料庫管理員,預設值為“root”,密碼為空白。與資料庫連接成功之後,這兩個函數都可以返回一個串連號,如果串連失敗,則返回一個false值。讓我們來看看下面幾句語句:
$db=mysql_connect("localhost","user","password");
mysql_select_db("mydb",$db);
?>
注釋:
$db=mysql_connect("localhost","user","password"); 我們將mysql的連結參數,包括主機名稱、使用者名稱和密碼作為mysql_connect()的參數,同時得到傳回值為$db,這樣,在下面的語句中,我們就可以將變數$db作為一個串連mysql資料庫的串連號來使用。
mysql_select_db("mydb",$db); 將PHP程式連結到mydb資料庫中,這樣程式與資料庫的連結就完成了。
10.1 一個簡易的資料庫留言簿
在完成資料庫的連結之後,我們就可以對資料庫進行一系列的操作。下面是一個簡易的資料庫留言簿程式(guestbook.php3):
我假設你機子上的MySQL資料庫以及管理MYSQL資料庫的工具 Phpmyadmin_2. 0.5都已經安裝完成,並且可以正常工作。
我們要做的第一件事情是建立一個留言資料庫,假定名字為: mydb。
1、啟動瀏覽器,開啟Phpmyadmin_2. 0.5 的管理WEB介面。
2、在“Create new database”文字框內輸入資料庫名稱mydb,然後按create按鍵。
下一步,我們要在該留言資料庫下建立一個資料表,假定名字為: guestbook。
建立該資料表的命令如下所示:
CREATE TABLE guestbook (ID INT NOT NULL AUTO_INCREMENT, name CHAR(250), email CHAR(250), job CHAR(250), comments BLOB, PRIMARY KEY(ID));
最後,將下面的留言簿程式挎貝到你機子的可寫目錄下面,並儲存成guestbook.php3檔案。就這麼簡單,你已經有了自己的留言簿了。
10.2 留言簿程式(guestbook.php3):
php
/* $host : your MySQL-host, usually 'localhost' */
/* $user : your MYSQL-username */
/* $password : your MySQL-password */
/* $database : your MySQL-database */
/* $table : your MySQL-table */
/* $page_title : the title of your guestbook-pages */
/* $admin_mail : email-address of the administrator to send the new entries to */
/* $admin_name : the name of the administrator */
/* $html_mail : say yes if your mail-agent can handle HTML-mail, else say no */
$host = "localhost";
$user = "";
$password = "";
$database = "mydb";
$table = "guestbook";
$page_title = "pert guestbook";
$admin_mail = "pert@21cn.com";
$admin_name = "Webmaster";
$html_mail = "no";
?>
<<SPAN class=GramE>?<SPAN class=SpellE>php</sPAN></sPAN> echo $<SPAN class=SpellE>page_title</sPAN>; ?>
/* connect to the database */
mysql_pconnect("$host","$user","$password") or die("Can't connect to the SQL-server");
mysql_select_db("$database");
/* action=view : retrieve data from the database and show it to the user */
if($action == "view") {
/* function for showing the data */
function search_it($name) {
/* some vars */
global $offset,$total,$lpp,$dir;
global $table,$html_mail,$admin_name,$admin_mail;
/* select the data to get out of the database */
$query = "SELECT name, email, job, comments FROM $table";
$result = mysql_query($query);
$total= mysql_numrows($result);
print "
onMouseOver="window.status='Add your name';return true" onMouseOut="window.status='';return true" TITLE="Add your name">加入留言<br><br>";
if ($total== 0) {
print "
此刻沒人留言<br><br>"; }
elseif ($total> 0) {
/* default */
$counter=0;
if ($dir=="") $dir="Next";
$lpp=5;
if ($offset==0) $offset=0;
if ($dir=="Next") {
if ($total > $lpp) {
$counter=$offset;
$offset+=$lpp;
$num=$offset;
if ($num > $total) {
$num=$total; } }
else {
$num=$total; } }
elseif ($dir=="Previous") {
if ($total > $lpp) {
$offset-=$lpp;
if ($offset < 0) {
$offset=0; }
$counter=$offset-$lpp;
if ($counter < 0)
$counter=0;
$num=$counter+$lpp; }
else {
$num=$total; } }
while ($counter < $num) {
$j=0;
$j=$counter + 1;
/* now really grab the data */
$i1=mysql_result($result,$counter,"name");
$i2=mysql_result($result,$counter,"email");
$i3=mysql_result($result,$counter,"job");
$i4=mysql_result($result,$counter,"comments");
$i4 = stripslashes ("$i4");
/* print it in a nice layout */
print "
n";
print "
n"; print "n"; print " Name: $i1n"; print " email:onMouseOver="window.status='Email $i2';return true" onMouseOut="window.status='';return true" TITLE="Email $i2">$i2n"; print " Job: $i3n"; print " Comment:n"; print " $i4n"; print " |
n";
print "n";
$counter++;
}
}
mysql_close();
}
/* execute the function */
search_it($name);
/* See if we need to put on the NEXT or PREVIOUS buttons */
if ($total > $lpp) {
echo("");
}
}
/* action=add : show a form where the user can enter data to add to the database */
elseif($action == "add") { ?>
}
/* action=send : add the data from the user into the database */
elseif($action == "send") {
/* check if a HTML-mail should be send or a plain/text mail */
if($html_mail == "yes") {
mail("$admin_name <$admin_mail>","PHP3 Guestbook Addition","
schreefhetvolgendeberichthetgastenboek
$name ($email) in :
|
|
$comments |
|
|
|
您的留言: |
$name |
您的大名: |
$email |
您的email: |
$job |
您的工作: |
", "From: $name <$email>nReply-To: $name <$email>nContent-type: text/htmlnX-Mailer: PHP/" . phpversion());
}
/* MySQL really hates it when you try to put things with ' or " characters into a database, so strip these...*/
$comments = addslashes ("$comments");
$query = "INSERT INTO guestbook VALUES('','$name', '$email', '$job', '$comments')";
$result = MYSQL_QUERY($query);
?>
感謝, <?php echo $name; ?>, 您的留言.
?action=view" onMouseOver="window.status='View your comment now';return true" onMouseOut="window.status='';return true" TITLE="View your comment now">觀看留言
}
/* if there's no action given, then we must show the main page */
else {
/* get the number of entries written into the guestbook*/
$query = "SELECT name from guestbook";
$result = MYSQL_QUERY($query);
$number = MYSQL_NUMROWS($result);
if ($number == "") {
$entry = "還沒有人留過言"; }
elseif ($number == "1") {
$entry = "目前留言人數1人"; }
else {
$entry = "目前留言人數 $number 人"; }
echo "
";
echo "
$entry
";
echo "
onMouseOver="window.status='請您留言';return true" onMouseOut="window.status='';return true" TITLE="Add your name to our guestbook">請您留言
";
if ($number > "") {
echo "
onMouseOver="window.status='觀看留言';return true" onMouseOut="window.status='';return true" TITLE="View the names in our guestbook">觀看留言
"; }
echo "
";
}
?>
著作權:onMouseOver="window.status='pert';return true" onMouseOut="window.status='';return true" TITLE="pert">無邊天際