PHP +MySQL快速入門 Lesson 3
MySQL資料庫與PHP的應用 1 2 3 4 5 讀取MySQL資料 更新MySQL資料 刪除MySQL資料
6-1 使用PHP連線MySQL資料庫 用PHP操作資料庫,會有以下四個步驟: 1、連接MySQL資料庫。 2、選擇資料庫,並設定資料庫連線編碼。 3、執行SQL語法。 4、關閉MySQL資料庫連線。 6-1.1 連接MySQL資料庫 連接MySQL資料庫有兩種方式,如以下介紹: 1、mysql_connect( ):屬於不佔線的連線方式,每次連線結束需使用mysql_close( )關閉連線,等下一次需要使用到資料庫的時候再建立連線。但若連線次數過於頻繁,容易造成伺服器額外的負擔。
mysql_connect("主機位置","資料庫帳號","資料庫密碼"); 格式如下: mysql_connect("主機位置","資料庫帳號","資料庫密碼"); 若PHP程式與資料庫都在同一台主機的硬碟裡,則主機位置可輸入『localhost』,其範例如下:mysql_connect("localhost","bill","123"); 若PHP程式與資料庫在不同的主機,主機位置則需要輸入資料庫主機的IP位址或網域名稱喔,其範例如下:mysql_connect("168.95.1.1","bill","123"); 2、mysql_pconnect( ):屬於佔線的連線方式,會獨佔一個連線,方便隨時與MySQL通訊。幫PHP程式使用mysql_pconnect( ),MySQL會去檢查是否有已經存在的資料庫連線,若有,就使用舊的連線;若無,就新開啟一個連線。此種連線方式有可能會造成伺服器忙碌,而導致無法連線。其格式如下: mysql_pconnect("主機位置","資料庫帳號","資料庫密碼");
mysql_query("set names 校對編碼"); 6-1.2 選擇資料庫 一個資料庫使用者可以擁有多個資料庫的操作權限,例如bill使用者有A資料庫與B資料庫的權限,而我們使用mysql_connect()連線MySQL之後,MySQL怎麼知道bill使用者要操作哪一個資料庫呢?我們可以使用mysql_select_db( )來選擇資料庫,其範例如下: mysql_select_db("資料庫名稱",連線編號); 範例:mysql_select_db("book",$link); 選擇資料庫後,記得要設定資料庫連線校對編碼方式,其格式如下: mysql_query("set names 校對編碼"); 範例: mysql_query("set names big5");
6-1.3 執行SQL語法 當資料庫連線成功後,我們可以利用mysql_query( )函式來執行新增(insert)、更新(update)、讀取(select)、刪除(delete)等功能,其格式如下: mysql_query(SQL指令); 6-1.4 關閉MySQL資料庫連線 如果使用mysql_connect( )來做連線方式,在執行完語法後,需使用mysql_close( )來關閉連線,如果是使用mysql_pconnect( )則無須使用mysql_close( )函式,因為mysql_close( )無法關閉mysql_pconnect所開啟的連線。 格式如下: mysql_close(連線編號);
6-1.5 PHP連線MySQL資料庫範例 我們來看看以下的範例,讓各位更了解PHP與MySQL之間的溝通: insert.php『新增一筆資料到members資料表』 1 <? 2 $link=mysql_connect("localhost","bill","123"); 3 mysql_select_db("book",$link); mysql_query("set names big5"); $str="insert into members(name,sex,year,month,day,phone,mail,address,reg_date,reg_time) values('陳小美','女','1975','4','11','0912345678','arfsw@xxxoo.com.tw','台中縣xx市xx路999號',now( ),now( ) )"; mysql_query($str,$link) or die("新增失敗"); mysql_close($link); 8 ?>
我們一行一行來講解。 首先看到第2行,我們先用mysql_connect() 建立一個連線,每次建立的連線,MySQL都會回傳一個連線編號,我們將連線編號指派給 $link 。 第3行:根據連線編號來選擇"book"資料庫。 第4行:設定資料庫之連線校對編碼方式。 第5行:有沒有很面熟呢?看起來很複雜,其實它只是一句簡單的SQL語法,它的作用是新增一筆資料到MySQL中。我們將這句SQL語法指派給 $str 。這段SQL語法中,有沒有看到now()函數呢?這是MySQL的函數,可以自動抓取目前的日期時間,但要注意的是,欄位型態必須設定為日期或時間型態,才不會有錯誤。 第6行:使用mysql_query()將SQL語法送到MySQL執行。那『or die("新增失敗");』是什麼意思呢?意思就是,若mysql_query()執行失敗,則會執行die()函數。die()函數的作用,可以在畫面上秀出你想讓使用者知道的資訊,並且立即停止程式的執行。 第7行:mysql_close($link);關閉資料庫連線。一隻PHP程式,可能會有一個甚至更多個資料庫的連線,每個資料庫連線都有特定的連線編號,因此,在你關閉資料庫連線時,必須讓指定連線編號,這樣MySQL才知道要關閉哪一個連線喔。
6-2 新增資料至MySQL members_insert.php『新增一筆資料到會員資料表』 依據第五章的會員資料表,我們來看看如何新增一筆資料到會員資料表裡面。 範例一: members_insert.php『新增一筆資料到會員資料表』 1 <? 2 $link=mysql_connect("localhost","bill","123"); 3 mysql_select_db("book",$link); 4 mysql_query("set names big5"); 5 $str="insert into members(name,sex,year,month,day,phone,address,reg_date) values('陳小美','女','1975','4','11','0912345678','台中縣xx市xx路999號',now( ))"; 6 mysql_query($str,$link) or ("新增失敗"); 7 mysql_close($link); 8 ?>
另外,上述範例中,第7行的『header("Localhost:index.php");』是什麼呢? 範例二: 有沒有發現?在上面的兩個範例中,我們都沒有新增『serial』的值,那麼為什麼在members資料表裡面欄位serial的值會自己出現呢?是因為我們把serial欄位的附加設定為『auto_increment』,還記得這是什麼意思嗎?簡單來說,我們選擇serial來當『主鍵』使用,並將其設定『auto_increment』;因此,當我們新增資料的時候,serial欄位的值就會自動編號了。 另外,上述範例中,第7行的『header("Localhost:index.php");』是什麼呢? members_insert.php『新增多筆資料到會員資料表』 1 <? 2 $link=mysql_connect("localhost","bill","123"); 3 mysql_select_db("book",$link); 4 mysql_query("set names big5"); 5 $str="insert into members(name,sex,year,month,day,phone,address,reg_date,reg_time) values('陳小美','女','1975','4','11','0912345678','台中縣xx市xx路999號',now(),now()), ('林大頭','男','1965','9','11','0915467890','台北縣xx市xx路111號',now(),now() ), ('黃阿勇','男','1972','5','20','095864809', '雲林縣xx市xx里777號',now(),now() )"; 6 mysql_query($str,$link) or ("新增失敗"); 7 mysql_close($link); 8 header("Localhost:index.php"); 9 ?>
header("Localhost:導向網址"); 簡單來說,它的作用是將網頁導向到其他頁面,其格式如下: header("Localhost:導向網址"); 以上範例程式執行完之後,會自動導向到『index.php』這一頁。為什麼要這麼做呢?當使用者新增完資料後,如果我們沒有把網頁導向另一頁,若使用者調皮或不小心在瀏覽器上點選『重新整理』,將會導致資料庫會多新增一筆或多筆資料。因此,在程式的結尾,記得把網頁導向另外一頁,除了可以讓使用者操作更方便外,也可以免除資料重複新增的顧慮唷。當然,這並不是必須遵守的規則,只是作者的經驗談。
6-3 讀取MySQL資料 讀取會員資料表中姓名為"陳小明"的出生年月日、電話、地址…等等。 1 <? 讀取單筆資料範例: 1 <? 2 $link=mysql_connect("localhost","bill","123"); 3 mysql_select_db("book",$link); 4 mysql_query("set names big5"); 5 $str="select year,month,day,phone,mail,address,reg_date from members where name='陳小明' "; 6 $list=mysql_query($str,$link); list($year,$month,$day,$phone,$mail,$address,$reg_date)=mysql_fetch_row($list); 8 mysql_close($link); 9 ?>
以上範例,我們讀取members資料表中的year、month、day、phone、mail、address、reg_date欄位的資料,並將MySQL回傳的值放到各個指定的變數中,方便後續PHP程式的運用。 讀取多筆資料範例: 讀取members資料表中指定的欄位資料,並搭配while迴圈將資料全部讀取出來,並顯示於畫面上。 1 <table border="1" width="100%"> 2 <tr><td>姓名</td> <td>性別</td><td>出生年月日</td> 3 <td>電話</td><td>註冊日期</td></tr> 4 <? 5 $link=mysql_connect("localhost","root","user"); 6 mysql_select_db("book",$link); 7 mysql_query("set names big5"); 8 $str="select name,sex,year,month,day,phone,reg_date from members"; 9 $list=mysql_query($str,$link); 10 while(list($name,$sex,$year,$month,$day,$phone,$reg_date)=mysql_fetch_row($list)) 11 { 12 echo "<tr><td>$name</td><td>$sex</td> 13 <td>$year 年 $month 月 $day 日</td> 14 <td>$phone</td><td>$reg_date</td></tr>"; 15 } 16 ?> </table>
執行結果:
6-4 更新MySQL資料 更新會員資料表中姓名為"陳小明"的電話號碼與電子郵件。 更新單筆資料範例: 1 <? 1 <? 2 $link=mysql_connect("localhost","bill","123"); 3 mysql_select_db("book",$link); 4 mysql_query("set names big5"); 5 $str="update members set phone='0423924505',mail='abc@ncut.edu.tw' where name='陳小明'"; 6 mysql_query($str,$link) or die("更新失敗"); 7 mysql_close($link); 8 ?>
更新多筆資料範例: 更新會員資料表中,出生年介於1970年至1975年之間的資料 1 <? 2 $link=mysql_connect("localhost","bill","123"); 3 mysql_select_db("book",$link); 4 mysql_query("set names big5"); 5 $str="update members set reg_date=now() where year between ‘1970’ and ‘1975’ "; 6 mysql_query($str,$link) or die("更新失敗"); 7 mysql_close($link); 8 ?>
6-5 刪除MySQL資料 刪除單筆資料範例: 刪除會員資料表中姓名為"陳小明"的資料 1 <? 1 <? 2 $link=mysql_connect("localhost","bill","123"); 3 mysql_select_db("book",$link); 4 mysql_query("set names big5"); 5 $str="delete from members where name='陳小明' "; 6 mysql_query($str,$link) or die("刪除失敗"); 7 mysql_close($link); 8 header("Localhost:index.php"); 9 ?>
刪除多筆資料範例: 刪除會員資料表中,出生年介於1970年至1975年之間的資料 1 <? 2 $link=mysql_connect("localhost","bill","123"); 3 mysql_select_db("book",$link); 4 mysql_query("set names big5"); 5 $str="delete from members where year between ‘1970’ and ‘1975’ "; 6 mysql_query($str,$link) or die("刪除失敗"); 7 mysql_close($link); 8 header("Localhost:index.php"); 9 ?>
刪除所有資料範例: 刪除所有資料範例: 1 <? 1 <? 2 $link=mysql_connect("localhost","bill","123"); 3 mysql_select_db("book",$link); 4 mysql_query("set names big5"); 5 $str="delete from members"; 6 mysql_query($str,$link) or die("刪除失敗"); 7 mysql_close($link); 8 header("Localhost:index.php"); 9 ?>