php with mysql

44
PHP with MySQL PHP with MySQL PHP 與 MySQL 與與 與與與與與與與與與 與與與與與 與與與與與 - 與與 SQL 與與

Upload: wyman

Post on 05-Jan-2016

49 views

Category:

Documents


1 download

DESCRIPTION

PHP with MySQL. PHP 與 MySQL 運作 建立與關閉資料連線 選擇資料庫 資料表查詢 - 利用 SQL 指令. PHP 在使用 MySQL 資料庫的資源時,必須經過以下的流程: 建立連線 ( 設定字元集與連線校對 ) 選擇資料庫 操作資料表 取得結果 讀取資料回傳 關閉連結. 建立資料連線. PHP 要使用 MySQL 資料庫的資源,首先要建立與資料庫伺服器之間的連線。 在資源使用完畢之後,必須要關閉資料的連線,將佔用的資源釋放。 mysql_connect() :建立資料連結 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: PHP with MySQL

PHP with MySQLPHP with MySQL

• PHP 與 MySQL 運作• 建立與關閉資料連線• 選擇資料庫• 資料表查詢 - 利用 SQL 指令

Page 2: PHP with MySQL

PHP 在使用 MySQL 資料庫的資源時,必須經過以下的流程:

1. 建立連線( 設定字元集與連線校對 )

2. 選擇資料庫3. 操作資料表4. 取得結果5. 讀取資料回傳6. 關閉連結

Page 3: PHP with MySQL

建立資料連線PHP 要使用 MySQL 資料庫的資源,首先要建立與資料庫伺服器之間的連線。

在資源使用完畢之後,必須要關閉資料的連線,將佔用的資源釋放。

mysql_connect():建立資料連結◦在 PHP 中可以使用 mysql_connect() 函式建立與 MySQL 之間的連線,其語法格式如下:

mysql_connect(MySQL伺服器位址 , 帳號 , 密碼 )

Page 4: PHP with MySQL

建立資料連線建立「資料連線」範例

$link= mysql_connect("127.0.0.1", "root", "pwd999");

// $link 稱為連接識別碼 (link identifier)而為因應可能出現的錯誤(如資料庫未啟動、連線埠口被佔用等問題),此一指令最好加上錯誤處理機制如下:

$link = mysql_connect('localhost', 'root', 'pwd999') or die("Could not connect : " . mysql_error());

或是$link =@mysql_connect('localhost', 'root', 'pwd999');if (!$link) die("Could not connect : " . mysql_error());

Page 5: PHP with MySQL

設定字元集與連線校對如果 MySQL 資料庫本身的字元集與連線校對是使用 big5 繁體中文,而 PHP 程式中卻是使用 utf-8 的編碼進行連線,那顯示的結果就必然會是亂碼了!

我們將統一使用 utf-8 的字元集與連線校對資料庫進行存取的動作,所以在建立資料連線之後就必須馬上宣告,如此一來就不會發生 PHP 存取編碼與資料庫設定編碼不同步的狀況發生。

可使用 mysql_query() 函式來設定,其結合SQL 指令後如下 :

mysql_query("SET NAMES 'utf8'");

Page 6: PHP with MySQL

建立連線引入檔在 PHP 程式中若要使用 MySQL 資料庫伺服器中的資源,都必須經過建立資料連線,一直到設定字元集與連線校對的步驟。

若能將這個標準流程中的程式碼儲存為一個單獨的檔案,無論哪個程式頁面需要使用到資料庫時就將這個檔案引入,即可完成使用資料庫前這一系列的動作。不僅可以提高開發程式的效率,也能讓未來維護時更加的方便。

Page 7: PHP with MySQL

連線引入檔範例<?php // 資料庫主機設定$db_host = "localhost";$db_username = "studdb";$db_password = "www2013";// 連線伺服器$db_link = @mysql_connect($db_host, $db_username, $db_password);if (!$db_link) die(" 資料連結失敗! ");// 設定字元集與連線校對mysql_query("SET NAMES 'utf8'");?>

connMysql.php

<?php header("Content-Type: text/html; charset=utf-8");include("connMysql.php");$seldb = @mysql_select_db("studdb");if (!$seldb) die(" 資料庫選擇失敗! ");$sql_query = "SELECT * FROM `students`";$result = mysql_query($sql_query);…

Page 8: PHP with MySQL

選擇資料庫在成功的建立與資料連線後,在 PHP 中可以使用 mysql_select_db() 函式選擇使用的資料庫,其語法格式如下:

也可利用 mysql_query 指令達成相同功能

「選擇資料庫」範例mysql_select_db("dbname"); 或mysql_query("use dbname");

mysql_select_db( 資料庫名稱 [, 連接識別碼 ])

mysql_query("use 資料庫名稱 ");

Page 9: PHP with MySQL

執行資料表查詢當成功建立資料連線、選好資料庫之後,就可以對資料表執行資料的查詢、新增、更新或刪除等動作。

我們可以使用 mysql_query() 函式在 MySQL 中「執行 SQL 指令」,其語法格式如下:

「資料表查詢」範例

$result= mysql_query("select * from `students`");

$result= mysql_query("select * from `students`", $db_link);

mysql_query(SQL 指令字串 [, 連接識別碼 ] )

Page 10: PHP with MySQL

選擇資料庫並執行查詢前述的「選擇資料庫」及「資料表查詢」需要用到下列兩指令 :mysql_select_db("studdb")$result=mysql_query("select * from `students`",$db_link);

其實 PHP 亦可將上述兩指令合併成下列指令 :

使用 mysql_db_query() 在 MySQL 中執行 SQL 指令後會回傳一個資源識別碼,否則會回傳 FALSE 值。例 :

$result = mysql_db_query("studdb", "select * from `students`", $db_link);

mysql_db_query(資料庫名稱 , SQL 指令字串 [,連接識別碼 ])

Page 11: PHP with MySQL

分析表頭由資料庫回傳的資料分成兩個部分,

◦「表頭」,也就是所傳回資料的欄位名稱,◦「表身」,也就是分析傳回的資料內容。

在 PHP 中可利用 mysql_fetch_field() 指令來查詢表頭,其指令格式如下 :

而因 SQL 查詢子句的不同,所傳回的表頭欄位數也不同,因此通常以 while 指令進行分析

mysql_fetch_field( 資源識別碼 )

Page 12: PHP with MySQL

<?php include("connMysql.php");$seldb = @mysql_select_db("studdb");if (!$seldb) die(" 資料庫選擇失敗! ");$sql_query = "SELECT * FROM `students`";$result = mysql_query($sql_query);…echo "<table><tr>";while ($field = mysql_fetch_field($result)) { echo "<th>{$field->name}</th>";}echo "</tr></table>";?>

分析表頭範例 ( 補充 )

Page 13: PHP with MySQL

mysql_num_fields( ), mysql_field_name( )mysql_num_fields( ), mysql_field_name( )<?php include("connMysql.php");$seldb = @mysql_select_db("studdb");if (!$seldb) die(" 資料庫選擇失敗! ");$sql_query = "SELECT * FROM `students`";$result = mysql_query($sql_query);…echo "<table><tr>";$cnt = mysql_num_fields($result);for ($i=0;$i<$cnt;$i++) { $fName= mysql_field_name($result, $i); echo "<th>$fName</th>";} echo "</tr></table>";?>

Page 14: PHP with MySQL

分析表身 ( 取得查詢資料 )表身便是傳回資料的實際內容,如以 student表格為例,表身資料便是『 cID 』、『 cName 』等表格實際內容。

而依「索引方式不同」,有下列的指令 :

mysql_fetch_row( ): 以 " 整數 " 為索引mysql_fetch_assoc( ): 以 " 欄位名稱 " 為索引mysql_fetch_array( ): 以 " 整數 " 及 " 欄位名稱 " 為索引均可

Page 15: PHP with MySQL

分析表身 - 以整數為索引利用「整數」為索引,其指令為

mysql_fetch_row( ) 格式如下 :

讀取查詢結果中的一筆資料,存成一個「陣列」,若到達記錄的底部就會回傳 false

例 :$row_result = mysql_fetch_row($result);

mysql_fetch_row( 資源識別碼 )

Page 16: PHP with MySQL

分析表身 - 以整數為索引範例

<?php header("Content-Type: text/html; charset=utf-8");include("connMysql.php");$seldb = @mysql_select_db("studdb");if (!$seldb) die(" 資料庫選擇失敗! ");$sql_query = "SELECT * FROM `students`";$result = mysql_query($sql_query);while ($row_result=mysql_fetch_row($result)){foreach($row_result as $item=>$value){ echo $item."=".$value."<br />";}echo "<hr />";}?>

Page 17: PHP with MySQL

分析表身 - 以欄位為索引範例<?php header("Content-Type: text/html; charset=utf-8");include("connMysql.inc");$seldb = @mysql_select_db("studdb");if (!$seldb) die(" 資料庫選擇失敗! ");$sql_query = "SELECT * FROM `students`";$result = mysql_query($sql_query);while($row_result=mysql_fetch_assoc($result)){ foreach($row_result as $item=>$value){ echo $item."=".$value."<br />"; } echo "<hr />";}?>

Page 18: PHP with MySQL

分析表身 - 以「整數及欄位名稱」為索引

<?php header("Content-Type: text/html; charset=utf-8");include("connMysql.inc");$seldb = @mysql_select_db("studdb");if (!$seldb) die(" 資料庫選擇失敗! "); $sql_query = "SELECT * FROM `students`"; $result = mysql_query($sql_query); while($row_result=mysql_fetch_array($result)){ foreach($row_result as $item=>$value){

echo $item."=".$value."<br />"; } echo "<hr />";}?>

Page 19: PHP with MySQL

移動記錄指標• 無論使用 mysql_fetch_row() 、 mysql_fetch_assoc() 或

mysql_fetch_array() 函式,每執行一次資料識別碼中的記錄指標只會向下移動一筆。如果我們想在執行查詢後可以直接前往指定的記錄所在,可以使用 mysql_data_seek() 函式,其語法格式如下:

mysql_data_seek( 資源識別碼 , 記錄指標位置 )

Page 20: PHP with MySQL

移動記錄指標範例

"studdb"

"connMysql.php"

Page 21: PHP with MySQL

學生資料管理系統學生資料管理系統

Page 22: PHP with MySQL

database: class, table: studentsdatabase: class, table: students

Page 23: PHP with MySQL

引入檔引入檔 :: connMysql.phpconnMysql.php

<?php

// 資料庫主機設定$db_host = "127.0.0.1";

$db_username = "studdb";

$db_password = "www2013";

// 連線伺服器$db_link = @mysql_connect($db_host, $db_username, $db_password);

if (!$db_link) die(" 資料連結失敗! ");

// 設定字元集與連線校對mysql_query("SET NAMES 'utf8'");

?>

Page 24: PHP with MySQL

data.php (1/3)data.php (1/3)

<?php

//header("Content-Type: text/html; charset=utf-8");

include("connMysql.php");

$seldb = @mysql_select_db("studdb");

if (!$seldb) die(" 資料庫選擇失敗! ");

$sql_query = "SELECT * FROM `students`";

$result = mysql_query($sql_query);

$total_records = mysql_num_rows($result);

?>

Page 25: PHP with MySQL

data.php (2/3)data.php (2/3)

<h1 align="center"> 學生資料管理系統 </h1><p align="center"> 目前資料筆數: <?php echo $total_records;?> , <a href="add.php"> 新增學生資料</a> 。 </p><table border="1" align="center"> <!-- 表格表頭 --> <tr> <th> 座號 </th><th> 姓名 </th><th> 性別 </th><th>生日 </th> <th> 電子郵件 </th><th> 電話 </th><th> 住址 </th><th> 功能 </th> </tr>

Page 26: PHP with MySQL

data.php (3/3)data.php (3/3)<?phpwhile($row_result=mysql_fetch_assoc($result)){

echo "<tr>";echo "<td>".$row_result["cID"]."</td>";echo "<td>".$row_result["cName"]."</td>";echo "<td>".$row_result["cSex"]."</td>";echo "<td>".$row_result["cBirthday"]."</td>";echo "<td>".$row_result["cEmail"]."</td>";echo "<td>".$row_result["cPhone"]."</td>";echo "<td>".$row_result["cAddr"]."</td>";echo "<td><a href='update.php?id=".$row_result["cID"]."'>

修改 </a> ";echo "<a href='delete.php?id=".$row_result["cID"]."'> 刪除

</a></td>";echo "</tr>";

}?>

Page 27: PHP with MySQL

新增 新增 (add.php)(add.php)

Page 28: PHP with MySQL

<form action="" method="post" name="formAdd" id="formAdd"> <table border="1" align="center" cellpadding="4"> <tr><th> 欄位 </th><th> 資料 </th></tr> <tr><td> 姓名 </td><td><input type="text" name="cName" id="cName"></td></tr> <tr><td> 性別 </td><td> <input type="radio" name="cSex" id="radio" value="M" checked> 男 <input type="radio" name="cSex" id="radio" value="F"> 女 </td></tr> <tr><td> 生日 </td><td><input type="text" name="cBirthday" id="cBirthday"></td></tr> <tr><td> 電子郵件 </td><td><input type="text" name="cEmail" id="cEmail"></td> </tr> <tr><td> 電話 </td><td><input type="text" name="cPhone" id="cPhone"></td></tr> <tr><td> 住址 </td><td><input name="cAddr" type="text" id="cAddr" size="40"></td></tr> <tr> <td colspan="2" align="center"> <input name="action" type="hidden" value="add"><input name="action" type="hidden" value="add"> <input type="submit" name="button" id="button" value=" 新增資料 "> <input type="reset" name="button2" id="button2" value=" 重新填寫 "> </td> </tr> </table></form>

add.php (1/2)

Page 29: PHP with MySQL

add.php (2/2)add.php (2/2)<?php if (isset($_POST["action"])&&($_POST["action"]=="add")) {

include("connMysql.php");if (!@mysql_select_db("studdb")) die(" 資料庫選擇

失敗! ");$sql_query = "INSERT INTO `students` (`cName`

,`cSex` ,`cBirthday` ,`cEmail` ,`cPhone` ,`cAddr`) VALUES (";

$sql_query .= "'".$_POST["cName"]."',";$sql_query .= "'".$_POST["cSex"]."',";$sql_query .= "'".$_POST["cBirthday"]."',";$sql_query .= "'".$_POST["cEmail"]."',";$sql_query .= "'".$_POST["cPhone"]."',";$sql_query .= "'".$_POST["cAddr"]."')";mysql_query($sql_query);$mysql_close($db_link);// 重新導向回到主畫面header("Location: data.php");

}?>

Page 30: PHP with MySQL

修改 修改 (update.php)(update.php)

Page 31: PHP with MySQL

update.php (1/2)update.php (1/2)<?php include("connMysql.php");if (!@mysql_select_db("studdb")) die(" 資料庫選擇失敗! ");if (isset($_POST["action"])&&($_POST["action"]=="update")) {

$sql_query = "UPDATE `students` SET ";$sql_query .= "`cName`='".$_POST["cName"]."',";$sql_query .= "`cSex`='".$_POST["cSex"]."',";$sql_query .= "`cBirthday`='".$_POST["cBirthday"]."',";$sql_query .= "`cEmail`='".$_POST["cEmail"]."',";$sql_query .= "`cPhone`='".$_POST["cPhone"]."',";$sql_query .= "`cAddr`='".$_POST["cAddr"]."' ";$sql_query .= "WHERE `cID`=".$_POST["cID"];mysql_query($sql_query);$mysql_close($db_link);// 重新導向回到主畫面header("Location: data.php");

}$sql_db = "SELECT * FROM `students` WHERE `cID`=".$_GET["id"];$result = mysql_query($sql_db);$row_result=mysql_fetch_assoc($result);?>

Page 32: PHP with MySQL

<form action="" method="post" name="formFix" id="formFix"><table border="1" align="center" cellpadding="4"><tr><th> 欄位 </th><th> 資料 </th></tr><tr><td> 姓名 </td><td><input type="text" name="cName" id="cName" value="<?php echo $row_result["cName"];?>"></td></tr><tr><td> 性別 </td><td><input type="radio" name="cSex" id="radio" value="M" <?php if($row_result["cSex"]=="M") echo "checked";?>> 男<input type="radio" name="cSex" id="radio" value="F" <?php if($row_result["cSex"]=="F") echo "checked";?>> 女</td></tr><tr><td> 生日 </td><td><input type="text" name="cBirthday" id="cBirthday" value="<?php echo $row_result["cBirthday"];?>"></td></tr><tr><td> 電子郵件 </td><td><input type="text" name="cEmail" id="cEmail" value="<?php echo $row_result["cEmail"];?>"></td></tr><tr><td> 電話 </td><td><input type="text" name="cPhone" id="cPhone" value="<?php echo $row_result["cPhone"];?>"></td></tr><tr><td> 住址 </td><td><input name="cAddr" type="text" id="cAddr" size="40" value="<?php echo $row_result["cAddr"];?>"></td></tr><tr><td colspan="2" align="center"><input name="cID" type="hidden" value="<?php echo $row_result["cID"];?>"><input name="action" type="hidden" value="update"><input type="submit" name="button" id="button" value=" 更新資料 "><input type="reset" name="button2" id="button2" value=" 重新填寫 "></td></tr></table></form>

update.php update.php (2/2)(2/2)

Page 33: PHP with MySQL

刪除 刪除 (delete.php)(delete.php)

Page 34: PHP with MySQL

delete.php (1/2)delete.php (1/2)

<?php include("connMysql.php");if (!@mysql_select_db("studdb")) die(" 資料庫選擇失敗! ");if (isset($_POST["action"])&&($_POST["action"]=="delete")) {

$sql_query = "DELETE FROM `students` WHERE `cID`=".$_POST["cID"];

mysql_query($sql_query);$mysql_close($db_link);// 重新導向回到主畫面header("Location: data.php");

}$sql_db = "SELECT * FROM `students` WHERE `cID`=".$_GET["id"];$result = mysql_query($sql_db);$row_result=mysql_fetch_assoc($result);?>

Page 35: PHP with MySQL

<form action="" method="post" name="formDel" id="formDel"><table border="1" align="center" cellpadding="4"><tr><th> 欄位 </th><th> 資料 </th></tr><tr><td> 姓名 </td><td><?php echo $row_result["cName"];?></td></tr><tr><td> 性別 </td><td><?php

if ($row_result["cSex"]=="M") echo " 男 ";

elseecho " 女 ";

?></td></tr><tr><td> 生日 </td><td><?php echo $row_result["cBirthday"];?></td></tr><tr><td> 電子郵件 </td><td><?php echo $row_result["cEmail"];?></td></tr><tr><td> 電話 </td><td><?php echo $row_result["cPhone"];?></td></tr><tr><td> 住址 </td><td><?php echo $row_result["cAddr"];?></td></tr><tr> <td colspan="2" align="center"> <input name="cID" type="hidden" value="<?php echo $row_result["cID"];?>"> <input name="action" type="hidden" value="delete"> <input type="submit" name="button" id="button" value=" 確定刪除這筆資料嗎? "> </td></tr></table></form>

delete.php (2/2)

Page 36: PHP with MySQL

資料分頁 資料分頁 (data_page.php)(data_page.php)

Page 37: PHP with MySQL

<?php include("connMysql.php");$seldb = @mysql_select_db("studdb");if (!$seldb) die(" 資料庫選擇失敗! ");$pageRow_records = 5;$num_pages = 1;// 若已經有翻頁,將頁數更新if (isset($_GET['page'])) $num_pages = $_GET['page'];// 本頁開始記錄筆數 = ( 頁數 -1)* 每頁記錄筆數$startRow_records = ($num_pages -1) * $pageRow_records;// 未加限制顯示筆數的 SQL 敘述句$sql_query = "SELECT * FROM `students`";// 加上限制顯示筆數的 SQL 敘述句,由本頁開始記錄筆數開始,每頁顯示預

設筆數$sql_query_limit = $sql_query." LIMIT " . $startRow_records. ", " .

$pageRow_records;// 以加上限制顯示筆數的 SQL 敘述句查詢資料到 $result 中$result = mysql_query($sql_query_limit);// 以未加上限制顯示筆數的 SQL 敘述句查詢資料到 $all_result 中$all_result = mysql_query($sql_query);// 計算總筆數$total_records = mysql_num_rows($all_result);// 計算總頁數 =( 總筆數 / 每頁筆數 ) 後無條件進位。$total_pages = ceil($total_records/$pageRow_records);

?>

data_page.php (1/2)

Page 38: PHP with MySQL

<table border="0" align="center"><tr> <?php if ($num_pages > 1) { // 若不是第一頁則顯示 ?> <td><a href="data_page.php?page=1"> 第一頁 </a></td> <td><a href="data_page.php?page=<?php echo $num_pages-1;?>"> 上一頁</a></td> <?php } ?> <?php if ($num_pages < $total_pages) { // 若不是最後一頁則顯示 ?> <td><a href="data_page.php?page=<?php echo $num_pages+1;?>"> 下一頁</a></td> <td><a href="data_page.php?page=<?php echo $total_pages;?>"> 最後頁 </a></td> <?php } ?> </tr></table><table border="0" align="center"> <tr><td> 頁數:<?phpfor ($i=1; $i<=$total_pages; $i++) { if ($i==$num_pages) echo $i." "; else echo "<a href=\"data_page.php?page=$i\">$i</a> ";}?></td></tr></table>

data_page.php (2/2)

Page 39: PHP with MySQL

Case study ( 自行練習 )新增、更新與刪除資料

◦系統分析

Page 40: PHP with MySQL

Homework - 線上投票設計三個網頁 :

◦ index.php: 顯示各候選人「照片、名稱、簡介」,並讓使用者可「單選一位候選人」。

其 form 的按鈕有「投票」、「重新選擇」、「新增候選人」、「觀看投票結果」

◦ recommand.htm: 可輸入「候選人名稱」、「候選人簡介」及「上傳候選人照片」

◦ result.php 顯示各候選人的「得票數」、「百分比」、「直方圖」

Page 41: PHP with MySQL

Homework - 線上投票 ( 資料庫版 )

資料庫名稱 :vote資料表名稱 :candidate欄位如下 :◦Id :主索引鍵,自動編號。◦Name :候選人姓名欄位。◦Introduction: 候選人介紹欄位。◦Score: 分數欄位。◦Picture: 照片檔名。

Page 42: PHP with MySQL

index.php

Page 43: PHP with MySQL

recommand.htm

Page 44: PHP with MySQL

result.php