星期二, 8月 10, 2010

20100810 PHP-MySQL-CLSS 7

20100810 PHP-MySQL-CLSS 7

*了解欄位型態之差異 

請利用 phpMyAdmin  建立資料表

資料表名稱 test1

欄位名稱 型態 長度
a VARCHAR 10
b TEXT 300
c INT 4
d BLOB
f Date

練習
請在 phpMyAdmin 上按 " 新增 ” 
  • a欄位 請輸入 十個  中文字
  • c欄位 請輸入英文字
  • d欄位 請選擇檔案
  • f 欄位 請輸入日期


因為輸入的 Value 與規範的型態不符合, 就會出現錯誤訊息

利用 ”載入”功能 匯入 pcschool 資料庫


Q: 為何 php 設定檔案上傳容量很大, 但 phpMyAdmin 卻沒辦法將資料載入系統?

A: 因為 Apache 在等待檔案上傳時, 有時間限制(預設 300 秒), 若超過預設時間, 則視為斷線(但是如果把 Apache 的 Timeout 設定延長, 將增加Apache 執行的負擔)


Lab: 利用指令匯出 MySQL

*mysqldump: 將資料匯出
  • mysqldump  -u帳號   -p密碼   資料庫   >   SQL  檔案
    • 將資料庫內容及結構匯出
  • 加上 --skip-opt  參數, 可將資料分行
    • mysqldump  -u帳號   -p密碼   --skip-opt  資料庫   >   SQL  檔案
  • 資料庫名稱之後可接資料表名稱,  例如 mysqldump  -u帳號  -p密碼
  • --no-data 參數, 沒有資料表內容
  • --no-create-info 沒有資料表結構
  • 雖然 mysqldump 可以加入 -B 加入 " 建立資料庫 ” 語法 但匯入資料時若資料庫不存在,  將無法匯入資料
    • -B 參數不實用, 建議匯入資料前先建立資料庫


以指令方式 登入 mysql
開啟 命令提示字元
開始 --> 執行 --> cmd

以下在命令提示底下操作
備份 pcschool
mysqldump  -uroot  -pphpmysql   pcschool   >   pcschool.sql

備份 pcschool 資料庫並將資料分行
mysqldump  -uroot  -pphpmysql   --skip-opt   pcschool  >   pcschool2.sql

備份 pcschool 資料庫內的student 資料表
mysqldump -uroot -pphpmysql pcschool student > pcschool3.sql

備份 pcschool 資料庫內的student 資料表 及 job  資料表
mysqldump  -uroot  -pphpmysql  pcschool  student  job >  pcschool5.sql

備份 pcschool 不包含資料
mysqldump  -uroot  -pphpmysql  --no-data  pcschool  >  pcschool6.sql

備份 pcschool 不包含資料表結構
mysqldump  -uroot  -pphpmysql  --no-create-info   pcschool  >  pcschool7.sql

備份 pcschool 不包含資料表結構並換行
mysqldump  -uroot  -pphpmysql  --skip-opt  --no-create-info   pcschool  >  pcschool8.sql


SQL  指令
  •  select    欄位名稱( 沒有則使用 * )  from  資料表
    • 查詢指定欄位(或是所有的欄位)的資料
    • 若欄位前面加上  distinct  代表過濾重複的資料
  • As 將欄位或查詢結果以其他名稱命名
    • MySQL 的 SQL 語法內可作數值計算
    • MySQL 的 Concat 函數可合併多個字串


在 phpMyAdmin 內新增 counter 資料庫( 需要先新增資料庫才能匯入 Orz...... )

首先嘗試使用 圖形介面匯入
得到的結果是 ............   Timeout
所以採取指令的方式 匯入
mysql   -uroot   -pphpmysql   counter  <  record2009.sql




Lab: 新增帳號
  1. 請以 root 身份登入 MySQL
  2. 語法  grant  權限   on   資料庫.資料表   to   帳號@主機   identified   by  ‘密碼 ‘


以指令方式 登入 mysql
開啟 命令提示字元
開始 --> 執行 --> cmd

以下在命令提示底下操作

mysql   -uroot   -pphpmysql

grant   all   privileges   on   *.  to    pcschool@localhost    identified    by    'phpmysql';

grant   all    privileges  on    board.*    to    php1@localhost    identified    by    'mysqlstart1';

grant    select    on    board2.*    to    php3@localhost    identified    by    'mysqlstart3';

登入 phpMyAdmin 測試


php 連接至 MySQL
  • 連接至 MySQL Server
    • mysql_connect( host, username, password )
  • 挑選資料庫
    • mysql_select_db( ‘資料庫' );




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

*當  php 及  MySQL 均是 UTF-8 編碼,  php 與 MySQL 之間的資料傳輸也必須作 編碼設定,  否則會是亂碼 (請參考 unicode.php)


執行 mysqlquery1.php 測試(這樣會出現亂碼)

<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>mysql_query</title></head><body><?
mysql_connect("localhost", "pcschool", "phpmysql") or die("無法連結主機");
mysql_select_db("pcschool") or die("無法連結資料庫");
//include("unicode.php");
//以下新增語法請做練習
//以下兩行為一行
//$sql =  "insert into list (username, email, sex) values('pcschool', ‘quota123@ms14.url.com.tw', '男')";
//$sql =  "insert into list (email, sex) values('quota123@ms14.url.com.tw', '男')";
//$sql =  "insert into list  values('quota123@ms14.url.com.tw','pcschool','男')";
$sql =  "insert into list  values('','pcschool','男')";
mysql_query($sql) or die(mysql_error( ));
?></body></html>



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"); ?>



測試步驟
  1. mysql_connect(   )   連接Server
  2. mysql_select_db(  )  挑選資料庫
  3. mysql_query(  )  執行 SQL 語法



Q: mysql_query(  ) 內語法錯誤, 網頁畫面會顯示嗎?

A: 不會. 建議 mysql_query( )  之後要接 or  die(mysql_error()) , 若mysql_query(  ) 有問題就會進行 mysql_error( )


-- class end --

沒有留言: