星期四, 8月 12, 2010

20100812 PHP-MySQL-CLASS 8

20100812 PHP-MySQL-CLASS 8

mysqldump 及 mysql 之 匯出入指令, 若是SQL 檔案, 不須登入 MySQL 就可以操作.

將 class8 內的 pcschool.sql 匯入到 pcschool 資料庫

mysql    -uroot   -pphpmysql     pcschool   <    pcschool2.sql
請注意檔案的路徑 需要切換到該檔案pcschool2.sql 存放的目錄

建立一個 Netbean 的PHP 專案 class8
建立新專案
File → New Project
PHP: PHP Application → Next
點選 Browse 按鈕 建立一個 class8 資料夾( source 按鈕調整於 C:\Appserv\www 目錄下 [網站根目錄] )
Finish
將相關檔案複製到 class8 資料夾

Lab: 測試接收資料

phptestint.php 檔案內容如下

<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>測試接收資料</title></head><body><?
$pid=$_GET['id'];
if (strlen($pid)){
if (!ereg("^[0-9]+$",$pid)){
  die("你不知道什麼是數字嗎?");
  }
else
  die("很好.這是數字");
 }
else{
 die("請輸入資料");
}

?></body></html>

針對以上的檔案
  • 可使用 strlen(  ) 函數分析網址列是否傳遞參數, 及參數的長度
  • if(!ereg(“規則”, $pid))
    • !  為相反
    • ereg  $pid 是否符合 ( ) 內的規則


mysql_query(  )  or  die(mysql_error());
  1. mysql_query(  ) 執行 SQL 語法
  2. mysql_query(  ) 異常則會執行 or 之後的語法
  3. mysql_query(  ) 異常指 SQL 語法本身就有問題
  4. mysql_error(  )  顯示錯誤訊息
  5. die(  )  顯示訊息後停止執行網頁, 若不想顯示系統訊息,  可改為 die(“其他文字”)


一般常見的語法問題
  • 字串資料沒加 單引號
    • MySQL的資料本身就是要加單引號, 請不要把 php 對單雙引號的處理方式帶入 SQL 語法
  • 欄位數量不對
  • 少了空格
    • 例如  insert  into


create  table  新資料表  select  A資料表資料
  • 由A資料表資料建立新資料表資料


Lab: 由 phpMyAdmin 的 SQL 功能內輸入 下列指令建立資料表

create table insertemployees select * from employees;
create table insertjob select * from job;
create table updateemployees1 select * from employees;
create table updateemployees2 select * from employees;
create table updateemployees3 select * from employees;
create table updatejob select * from job;
create table updateproducts select * from products;
create table delemployees1 select * from employees;
create table delemployees2 select * from employees;
create table delemployees3 select * from employees;
create table deljob select * from job;

執行結果如下





新增資料
  • 若沒有欄位名稱
    • insert  into  資料表  values( 內容一, 內容二 );
    • 必須列出所有欄位內容, 沒有內容請用 ’  ‘
    • 所有欄位須依資料表內順序排列
  • 若有欄位名稱
    • insert  into  資料表(欄位一, 欄位二)  values( 內容一, 內容二 );
    • 不須依資料表內順序排列



Notes:
  • 當 MySQL 執行 insert into ( 新增 ), 刪除 ( delete ), 更新 ( update ) 等動作, 是不會顯示資料列表
    • 若要顯示資料表列, 必須使用 select 語法

  • mysql_query(  ) 一次只能執行一 個 SQL 語法
    • php5 另外提供 mysqli 函數, 可執行多個 SQL  語法



Q: 為何 php 可以跑, MySQL 可以跑, 但 php 無法連線至 MySQL?

A: 請寫一個網頁
<?
phpinfo();
?>
查看 MySQL 模組是否存在


**MySQL 連接過程整理

1.連接 MySQL Server
mysql_connect(  )

2.挑選資料庫
mysql_select_db(  )

3.編碼設定

以上三個步驟可以參考 server.php 內容

<?
mysql_connect("localhost", "root", "phpmysql") or die("無法連結主機");
mysql_select_db("pcschool") or die("無法連結資料庫");
include("unicode.php");
?>

unicode.php 內容如下(設定編碼)

<?
mysql_query("SET NAMES utf8");
mysql_query("CHARACTER SET utf8");
mysql_query("SET CHARACTER_SET_CLIENT =utf8");
mysql_query("SET COLLATION_CONNECTION=utf8_general_ci");
mysql_query("SET CHARACTER_SET_RESULTS =utf8");
mysql_query("SET CHARACTER_SET_SERVER = utf8");
mysql_query("SET character_set_connection=utf8");
?>

4.執行 SQL 語法
mysql_query(  )
  • 若是 insert into, delete, update, 執行完成 mysql_query(  ) 後資料表就改變
  • 若是 select 查詢, 可以顯示資料


5.將 mysql_query(  ) 執行結果儲存於自訂變數
  • 若不儲存, 無法做後續利用


6-1 mysql_num_row(  ) 計算筆數


Lab: 計算筆數

mysql_num_rows.php 內容如下

<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>計算筆數</title></head><body><?
@mysql_connect("localhost", "pcschool", "phpmysql") or die("無法連結主機");
@mysql_select_db("pcschool") or die("無法連結資料庫");
include("unicode.php");
$abc="select username from list";
echo $abc."<br>";
$sql =  mysql_query($abc) or die(mysql_error( ));;
$rows = mysql_num_rows($sql);
if($rows==""){
    echo "查無資料!";
}else{ echo "有 ".$rows." 筆資料喔!";}
?></body></html>

6-2 mysql_fetch_array(  )   回傳欄位資料
  • 回傳的資料丟給陣列變數儲存
    • 例如 $list1=mysql_fetch_array( mysql_query()儲存值 );
  • 陣列變數內儲存該筆紀錄的各欄位資料
    • 例如 $list1[‘OrderID’]


-- class end --

沒有留言: