查看完整版本: PHP & MySQL 初級教程

Linux0911 2006-10-10 10:19 PM

PHP & MySQL 初級教程

from: Discuz.net [url]http://www.discuz.net/thread-364977-1-1.html[/url]

製作插件前如果還不會 PHP 和 MySQL 就先看一看吧~


[color=red][b]1. PHP 簡介[/b][/color]
PHP 是一種易於學習和使用的伺服器端腳本語言。只需要很少的編程知識你就能使用 PHP 建立一個真正交互的 WEB 網站。本教程並不想讓你完全瞭解這種語言,只是能使你盡快加入開發動態 web 網站的行列。我假定你有一些 HTML(或者 HTML 編輯器)的基本知識和一些編程思想。

PHP 是能讓你生成動態網頁的工具之一。PHP 網頁檔被當作一般 HTML 網頁檔來處理並且在編輯時你可以用編輯 HTML 的一般方法編寫 PHP。

PHP 代表:超文字預處理器(PHP: Hypertext Preprocessor)。PHP 是完全免費的,不用花錢,你可以從 PHP 官方網站([url]http://www.php.net)[/url] 自由下載。PHP 遵守 GNU 公共許可(GPL),在這一許可下誕生了許多流行的軟體諸如 Linux 和 Emacs。你可以不受限制的獲得源碼,甚至可以從中加進你自己需要的特色。PHP 在大多數 Unix 平台,GUN/Linux 和微軟 Windows 平台上均可以運行。怎樣在 Windows 環境的 PC 機器或 Unix 機器上安裝 PHP 的資料可以在 PHP 官方網站上找到。安裝過程很簡單。


1.1 歷史

三年前,Rasmus Lerdorf 為了創建他的在線簡歷而創造了 "個人網站工具"(Personal Home Page Tools)。這是一種非常簡單的語言。其後越來越多的人們注意到了這種語言並對其擴展提出了各種建議。在許多人的無私奉獻下以及這種語言本身的源代碼自由性質,它演變成為一種特點豐富的語言,而且現在還在成長中。

PHP 雖然很容易學習,但是速度上比 mod_perl(植入 web 伺服器的 perl 模組)慢。Andy Gutmans 和 Zeev Suraki 是 Zend 的主要作者。可以去 Zend 網站 ([url]http://www.zend.com[/url]) 瞭解更多。

PHP 的應用在個人性質的 web 工程中增長顯著。根據 Netcraft 在 1999 年 10 月的報告,有 931122 個域和 321128 個 IP 地址利用 PHP 技術。

1.2 PHP 的先進之處

應用 PHP 有許多好處。當然已知的不利之處在於 PHP 由於是開放源碼項目,沒有什麼商業支持,並且由此而帶來的執行速度緩慢(直到 PHP 4 之前)。但是 PHP 的郵件列表很是有用而且除非你正在運行像 Yahoo! 或者 Amazon.com 這樣的極受歡迎的網站,你不會感覺出 PHP 的速度與其他的有什麼不同。最起碼我就沒有感覺出來!好了,讓我們來看看 PHP 有那些優點:

- 學習過程


我個人更喜歡 PHP 的非常簡單的學習過程。與 Java 和 Perl 不同, 你不必把頭埋進 100 多頁的文檔中努力學習才可以寫出一個像樣的程序。只要瞭解一些基本的語法和語言特色,你就可以開始你的 PHP 編碼之旅了。之後你在編碼過程中如果遇到了什麼麻煩,還可以再去翻閱相關文檔。

PHP 的語法與 C,Perl,ASP 或者 JSP。對於那些對上述之一的語言較熟悉的人來說,PHP 太簡單了。相反的,如果你對 PHP 瞭解較多,那麼你對於其他幾種語言的學習都很簡單了。

你只需要 30 分鐘就可以將 PHP 的核心語言特點全部掌握,你可能已經非常瞭解 HTML,甚至你已經知道怎樣用編輯設計軟體或者手工來製作好看的 WEB 網站。由於 PHP 代碼能夠無障礙的添加進你的網站,在你設計和維護網站的同時,你可以很輕鬆的加入 PHP 使得你的網站更加具有動態特性。

- 資料庫連接

PHP 可以編譯成具有與許多資料庫相連接的函數。PHP 與 MySQL 是現在絕佳的組合。你還可以自己編寫外圍的函數取間接存取資料庫。通過這樣的途徑當你更換使用的資料庫時,可以輕鬆的更改編碼以適應這樣的變化。PHPLIB 就是最常用的可以提供一般事務需要的一系列基庫。

- 可擴展性

就像前面說的那樣,PHP 已經進入了一個高速發展的時期。對於一個非程序員來說為 PHP 擴展附加功能可能會比較難,但是對於一個 PHP 程序員來說並不困難。

- 面向對像編程

PHP 提供了類和對象。基於 web 的編程工作非常需要面向對像編程能力。PHP 支援構造器、提取類等。

- 可伸縮性

傳統上網頁的交互作用是通過 CGI 來實現的。CGI 程序的伸縮性不很理想,因為它為每一個讜誦械腃 CGI 程序開一個獨立進程。解決方法就是將經常用來編寫 CGI 程序的語言的解釋器編譯進你的 web 伺服器(比如 mod_perl, JSP)。PHP 就可以以這種方式安裝,雖然很少有人願意這樣以 CGI 方式安裝它。內嵌的 PHP 可以具有更高的可伸縮性。

- 更多特點

PHP 的開發者們為了更適合 web 編程,開發了許多外圍的流行基庫,這些庫包含了更易用的層。你可以利用 PHP 連接包括 Oracle,MS-Access,Mysql 在內的大部分資料庫。你可以在蒼蠅上畫圖,編寫程序下載或者顯示 e-mail。你甚至可以完成網路相關的功能。最好的是,你可以選擇你的 PHP 安裝版本需要哪些功能。引用 Nissan 的 Xterra 的話來說就是 PHP 可以做到你想讓它做到的一切而且無所不能!

1.3 競爭對手:ASP,mod_perl, JSP

我當然不清楚 ASP/JSP 能做些什麼。不過明確的是編寫那樣的代碼有多簡單,購買它們會有多昂貴以及它們需要多麼昂貴和強大的硬體。如果你有什麼中立的觀點(比如說沒有被 SUN 和 Microsoft 的百萬美金所影響),請順便通知我。

據我所知,JSP 基於 Java,因此 Java 程序員可以輕鬆開始編碼。ASP 只是一個一般的引擎,具有支援多種語言的能力,不過預設的並且是最常用的還是 VBScript。

mod_perl 與 Perl 一樣強大,只是更快一些。

[[i] 本帖最後由 mastermind007 於 2006-9-1 17:08 編輯 [/i]]






















[color=red][b]2. PHP 基本注意事項[/b][/color]
2.1) Web Server 如何分辨 PHP 的檔案與 HTML 檔案:
要讓 Web Server 能執行檔案中的 PHP 程式碼,檔案的副檔名,必須是 .php 或 .phtml。

2.2) 程式碼區域的開始與結束:
為了讓 Web Server 能區分出 PHP 的程式碼與 HTML 碼,所以,在每段 PHP 程式碼的開頭必須加入
[code]
<?php
[/code]
,在結尾的地方加
[code] ?>[/code]


2.3) 命令句:
在 PHP 中,每一個命令句必須以分號
[code];[/code]
作結束。否則會出現問題。

2.4) 變數:
變數是用來儲存程式執行時的暫存資料。在 PHP 中,變數之前必需加 [code]$[/code] 的符號。另外,PHP 內編碼的大小寫是有差別的,所以在使用變數時,須注意大小寫是否一致。PHP 是屬於 weakly typed 的程式語言,對資料型態的規範較鬆,可以不先經宣告變數,就可以直接使用。好處是,程式寫起來比較方便,壞處是,程式出問題時,比較難找出錯誤。

2.5) 程式註解:
PHP 使用的註解符號,與 C++,Java 一樣,單行的註解使用 [code]//[/code]。// 之後同一行所有的文字,都將不被執行。如果要使用多行的註解,可用[code] /* [/code]和 [code]*/[/code] 的註解符號(上下必須對其)。自 /* 開始到 */ 之間的所有文字,在執行時都會被乎略。
總結演示:

[[i] 本帖最後由 mastermind007 於 2006-8-24 09:38 編輯 [/i]]






















[color=red][b]3. PHP 基本程控結構[/b][/color]
3.1 摘要:
程式控制結構,分為條件式於迴圈兩種,提供 PHP 程式決定判斷的基本能力。


[color=blue]3.2 if 命令句:[/color]
實例:
[code]
<?php
echo "if 範例: ";
if($fruit == "apple"){
        echo '只有當 $fruit 變數等於是 apple 時, 這一行才會出現';
}
echo '<p>這一行永遠會出現: $fruit = '.$fruit."</p>";
?>
[/code]
3.2.1
實例:
[code]
<?php
echo "if-else 範例: ";
if($fruit == "apple"){        
              echo '<只有當 $fruit 變數等於是 apple 時, 這一行才會出現來';
}else{        
echo '只要 $fruit 變數不是 apple 時, 就會出現這一行';
}echo '<p>我們的水果: $fruit = '.$fruit."</p>";?>
[/code]
3.2.2
實例:
[code]
<?php
echo "if-elseif-else 範例: ";
if($fruit == "apple"){        
echo '只有當 $fruit 變數等於是 apple 時, 這一行才會出現';
}elseif($fruit=="orange"){        
echo '只有當要 $fruit 變數是 orange 時, 才會出現這一行';
}else{        
echo '>其他的, 都會出現這一行';
}echo '<p>我們的水果: $fruit = '.$fruit."</p>";
?>
[/code]
3.2.3
實例:  if 的另一種用法, 內嵌在其他文件中
[code]
<?php
if($fruit=="apple"):
?>
只有當 $fruit 變數等於 apple 時, 這一行才會出現

<?php
elseif($fruit=="orange"):
?>
只有當 $fruit 變數是 orange 時, 才會出現這一行

<?php
else:
?>
其他的, 都會出現這一行
<?php
endif;
?>

我們的水果: $fruit = <?=$fruit?>
[/code]



[color=blue]3.3 switch 命令句:[/color]
用以當出於各種條件下選擇後出現的結果 [ 可以很好的替換多個 if 和 elseif ]
實例:
[code]
<?php
echo "switch 範例: case 的標籤值為常數";
switch($fruit){        
case "apple":               
$myfruit = "蘋果";               
break;        
case "banana":               
$myfruit = "香蕉";               
break;        
case "orange":               
$myfruit = "柳橙";               
break;        
case "guava":               
$myfruit = "石榴";               
break;        
case "pear":               
$myfruit = "梨子";               
break;        
default: // default 的預設選擇               
$myfruit = "西瓜";
} echo "你選的是 $myfruit ";
?>
[/code]
3.3.1
使用變數
實例:
[code]
<?php
echo "switch case 的標籤值為變數";
$a = "apple";
$b = "banana";
$c = "orange";
$d = "guava";
$e = "pear";
switch($fruit){        
case $a:               
$myfruit = "蘋果";               
break;        
case $b:               
$myfruit = "香蕉";               
break;        
case $c:               
$myfruit = "柳橙";               
break;        
case $d:               
$myfruit = "石榴";               
break;        
case $e:               
$myfruit = "梨子";               
break;        
default:               
$myfruit = "西瓜";
} echo "你選的是 $myfruit ";
?>
[/code]



[color=blue]3.4 while 迴圈:[/color]
當 condition 的值為真時,一直執行 { 和 }所包圍住的程式區段,直到 condition 的值變成假的為止。所以,使用 while 迴圈時,要特別注意,程式區段裡的命令句,或 ?condition 這個運算式本身,必須要能隨時更新,讓 condition 能變成假的值。
實例:
[code]
while(condition){
    statement 1;
    statement 2;
    .
    .
    statement n;

}
[/code]
3.4.1
{  }所包圍的程式區段, 改變 while 的 condition
實例:
[code]
<?php
$i = 0;
while($i < 10){        
echo "$i 的平方: ".$i * $i."<br />";
$i++;
}
?>
[/code]
3.4.2 while 的另一種用法, 內嵌在其他文件中
實例:
[code]
<?php $i = 0; ?>
<?php while($i++ < 10): ?>
<?=$i?> 的平方: <?=$i * $i?> <br />
<?php endwhile;?>
[/code]



[color=blue]3.5 for 迴圈:[/color]
用法差不多,但還是給點實例吧
實例:
[code]
<?php
for($i = 1; $i < 10; $i++){
echo "<TR><TD>$i</TD><TD>".$i * $i."</TD></TR>";
}
echo "</TABLE>";
?>
[/code]
3.5.1 for 的另一種用法, 內嵌在其他文件中
實例:
[code]
<TABLE border=1>
<TR><TD>數字</TD><TD>平方</TD></TR>
<?php for($i = 1; $i < 10; $i++): ?>
<TR><TD><?=$i?></TD><TD><?=$i * $i?></TD></TR>
<?php endfor;?>
</TABLE>
[/code]

[color=blue]3.6 利用 $_GET:[/color]
$_GET 可以從網址獲取變數訊息,比如說: [url]http://yoursite.com/index.php?action=haha[/url]
那麼,PHP 檔案就可以這樣寫(把 $_GET 引用近來):
[code]
<?php
if(PHP_VERSION < '4.1.0') {
        $_GET = &$HTTP_GET_VARS;
}
if(!$register_globals || !$magic_quotes_gpc) {
        @extract(addslashes($_GET));
}
if($action == 'haha') {
                echo "great";
}
?>



綜合小實例:
寫一個程式模擬投擲一顆骰子 6000 次,並記錄每每個點數,出現的次數。
實例 1:
[code]
<?php
define ("THROWS", 6000);
$p1 = 0;
$p2 = 0;
$p3 = 0;
$p4 = 0;
$p5 = 0;
$p6 = 0;
for($i = 0; $i < THROWS; $i++){        
$p = rand(1, 6);        
switch($p){               
case 1:                        
$p1++;                        
break;               
case 2:                        
$p2++;                        
break;               
case 3:                        
$p3++;                        
break;               
case 4:                        
$p4++;                        
break;               
case 5:                        
$p5++;                        
break;               
case 6:                        
$p6++;                        
break;        
}
}echo <<<END
<div align=center>擲骰子<br></div>
<TABLE border=1 align=center>
<TR>        
<TD>點數</TD>        
<TD>次數</TD>
</TR>
<TR>        
<TD>1</TD>        
<TD>$p1</TD>
</TR>
<TR>        
<TD>2</TD>        
<TD>$p2</TD>
</TR>
<TR>        
<TD>3</TD>        
<TD>$p3</TD>
</TR>
<TR>        
<TD>4</TD>        
<TD>$p4</TD>
</TR>
<TR>        
<TD>5</TD>        
<TD>$p5</TD>
</TR>
<TR>        
<TD>6</TD>        
<TD>$p6</TD>
</TR>
</TABLE>
END;
?>
[/code]
實例2:
[code]
<?php
define ("THROWS", 6000);
$p = array(0,0,0,0,0,0,0);
for($i = 0; $i < THROWS; $i++){        
$points = rand(1, 6);        
$p[$points]++;
}echo <<<END
<div align=center>"擲骰子: 使用陣列"<br></div>
<TABLE border=1 align=center>
<TR>        
<TD>點數</TD>        
<TD>次數</TD>
</TR>
<TR>        
<TD>1</TD>        
<TD>$p[1]</TD>
</TR>
<TR>        
<TD>2</TD>        
<TD>$p[2]</TD>
</TR>
<TR>        
<TD>3</TD>        
<TD>$p[3]</TD>
</TR>
<TR>        
<TD>4</TD>        
<TD>$p[4]</TD>
</TR>
<TR>        
<TD>5</TD>        
<TD>$p[5]</TD>
</TR>
<TR>        
<TD>6</TD>        
<TD>$p[6]</TD>
</TR>
</TABLE>
END;
?>
[/code]

[[i] 本帖最後由 mastermind007 於 2006-10-10 19:33 編輯 [/i]]






















[color=red][b]4. PHP 數據類型[/b][/color]

PHP 支援整數、浮點數、字串、數組和對象。變數類型通常不由程序員決定而由 PHP 運行過程決定(真是好的解脫!)。當然,如果你喜歡的話,你也可以使用 cast 或者函數 settype() 將某種類型的變數轉換成指定的類型。

[color=blue]4.1 數值[/color]

數值類型可以是整數或是浮點數。你可以用以下的語句來為一個數值賦值:
[code]
$a = 1234; # 十進制數
$a = -123; # 負數
$a = 0123; # 八進制數 (等於十進制數的 83)
$a = 0x12; # 十六進制數(等於十進制數的 18)
$a = 1.234; # 浮點數"雙精度數"
$a = 1.2e3; # 雙精度數的指數形式
[/code]
字串

字串可以由單引號或雙引號引出的字段定義。注意不同的是被單引號引出的字串是以字面定義的,而雙引號引出的字串可以被擴展。而且,在雙引號字串中可以使用反斜槓()在字串中加入轉義序列和轉換字元。舉例如下:
[code]
$first = 'Hello';
$second = "World";
$full1 = "$first $second"; # 產生 Hello World
$full2 = '$first $second';# 產生 $first $second
$full3="01DC studio,." 2000 copyright." " ;
[/code]
  請注意最後一行,如果需要在字串中使用雙引號,可以使用反斜槓字元,像該行語句所示。這裡的的反斜槓用來使雙引號的功能改變。

  可以將字元和數字利用運算符號連接起來。字元被轉化成數字,利用其最初位置。在 PHP 手冊中有詳細的例子。

[color=blue]4.2 數組與哈希表[/color]

數組與哈希表以同樣的方法被支持。怎樣運用取決於你怎樣定義它們。你可以用 list() 或者 array() 來定義它們,也可以直接為數組賦值。數組的索引從 0 開始。雖然我在這裡沒有說明,但是你一樣可以輕易的使用多維數組。

// 一個包含兩個元素的數組
$a[0] = "first";
$a[1] = "second";
$a[] = "third"; // 添加數組元素的簡單方法
// 現在 $a[2] 被賦值為 "third"
echo count($a); // 印出 3,因為該數組有 3 個元素
// 用一個語句定義一個數組並賦值
$myphonebook = array (
"sbabu" => "5348",
"keith" => "4829",
"carole" => "4533"
);
// 噢,忘了教長吧,讓我們添加一個元素
$myphonebook["dean"] = "5397";
// 你定義的 carale 元素錯了,讓我們更正它
$myphonebook["carole"] => "4522"
// 我還沒有告訴你怎樣使用數組的相似支援方式嗎?讓我們看一看
echo "$myphonebook[0]"; // sbabu
echo "$myphonebook[1]"; // 5348

其他一些對數組或哈希表有用的函數包括 sort(),next(),prev() 和 each()。

[color=blue]4.3 對像[/color]

使用 new 語句產生一個對像:
實例:
[code]
<?php
class foo
{
function do_foo ()
{
echo "Doing foo.";
}
}
$bar = new foo;
$bar->do_foo();
?>
[/code]
[color=blue]4.4 改變變數類型[/color]

在 PHP 手冊中提到:"PHP 不支援(也不需要)直接在聲明變數時定義變數類型;變數類型將根據其被應用的情況決定。如果你為變數 var 賦值為一個字串,那麼它變成了一個字串。如果你又為它賦了整數值,那麼它就變成了整數。"
[code]
$foo = "0"; // $foo 是字串 (ASCII 48)
$foo++; // $foo 是字串 "1" (ASCII 49)
$foo += 1; // $foo 現在是整數 (2)
$foo = $foo + 1.3; // $foo 是一個雙精度數 (3.3)
$foo = 5 + "10 Little Piggies"; // $foo 是一個整數 (15)
$foo = 5 + "10 Small Pigs"; // $foo 是一個整數 (15)
[/code]
如果想要強行轉換變數類型,可以使用與 C 語言相同的函數 settype()。

[color=blue]4.5 變數與常數[/color]

在上一帖已經用到了變數,所有變數都是局部變數,為了使得定義的函數中可以使用外部變數,使用 global 語句。而你要將該變數的作用範圍限制在該函數之內,使用 static 語句。
實例:
[code]
<?php
$g_var = 1 ; // 全局範圍
function test()
{
global $g_var; // 這樣就可以聲明全局變數了
}
?>
[/code]
PHP 內置了許多已定義的變數。你也可以用 define 函數定義你自己的常數,比如 define("CONSTANT","value")。

[color=blue]4.6 運算符號[/color]

PHP 具有 C, C++ 和 Java 中的通常見到的運算符號。這些運算符號的優先權也是一致的。賦值同樣使用 "="。

4.5.1 算術和字元

以下只有一種運算符號是有關字元的:
[code]
$a + $b :加
$a - $b :減
$a * $b :乘
$a / $b :除
$a % $b :取模(餘數)
$a . $b :字串連接
[/code]
4.5.2 邏輯和比較

邏輯運算符號有:
[code]
$a || $b :或
$a or $b :或
$a && $b :與
$a and $b :與
$a xor $b :異或 (當 $a 或 $b 為 true 時為 true,兩者一樣時為 false)
! $a :非
[/code]
[code]
比較運算符號有:
$a == $b :相等
$a != $b :不等
$a < $b :小於
$a <= $b :小於等於
$a > $b :大於
$a >= $b :大於等於
[/code]
與 C 一樣 PHP 也有三重運算符號(?:)。位操作符在 PHP 同樣存在。

優先權

就和 C 以及 Java 一樣!

[color=blue]4.7 控制流程結構[/color]

PHP 有著與 C 一樣的流程控制。大部分在上一貼已經解釋過,在這兒讓大家複習複習~
4.7.1 if, else, elseif, if(): endif
[code]
if (表達式一)
{
. . .
}
elseif (表達式二)
{
. . .
}
else
{
. . .
}
// 或者像 Python 一樣
if (表達式一) :
. . .
. . .
elseif (表達式二) :
. . .
else :
. . .
endif ;
[/code]
4.7.2 while, do..while, for
[code]
while (表達式)
{
. . .
}
do
{
. . .
}
while (表達式);
for (表達式一; 表達式二; 表達式三)
{
. . .
}
//或者像 Python 一樣
while (expr) :
. . .
endwhile ;
[/code]

4.7.3 switch
[color=red]switch 是對多重 if-elseif-else 結構的最好的替換:[/color]
實例:
[code]
switch ($i)
{
case 0:
print "i equals 0";
case 1:
print "i equals 1";
case 2:
print "i equals 2";
}
[/code]
4.7.4 break, continue
break 中斷當前的循環控制結構。
continue 被用來跳出剩下的當前循環並繼續執行下一次循環。

4.7.5 require, include

就像 C 中的 #include 預處理一樣。你在 require 中指定的那個文件將替代其在主文件中的位置。在有條件的引用文件時,可以使用 include()。這樣就使得你可以將複雜的 PHP 文件分割成多個文件並且在不同需要時分別引用它們。

[color=blue]4.8 函數[/color]
你可以像以下的例子一樣定義自己的函數。函數的返回值可以是任何數據類型:
實例:
[code]
function foo (變數名一, 變數名二, . . . , 變數名 n)
{
echo "Example function.n";
return $retval;
}
[/code]
所有 PHP 代碼都可以出現在函數定義中,甚至包括對其他函數和類的定義。函數必須在引用之前定義。

[color=blue]4.9 類[/color]

利用類模型建立類。由於較複雜,這裡不加解說
實例:
[code]
class Employee
{
var $empno; // 員工人數
var $empnm; // 員工姓名

function add_employee($in_num, $in_name)
{
$this->empno = $in_num;
$this->empnm = $in_name;
}

function show()
{
echo "$this->empno, $this->empnm";
return;
}

function changenm($in_name)
{
$this->empnm = $in_name;
}
}

$sbabu = new Employee;
$sbabu->add_employee(10,"sbabu");
$sbabu->changenm("babu");
$sbabu->show();
[/code]

[[i] 本帖最後由 mastermind007 於 2006-8-24 09:56 編輯 [/i]]






















[color=red][b]5. PHP 函式的應用[/b][/color]
函式,是一個獨立的程式碼區段,只需撰寫一次,就可以讓程式的其他部分,藉由呼叫函式的方式,重複使用。通常,函式會接受參數,執行特定的功能,傳回程式執行的結果。藉由使用函式,可以節省你的程式開發時間,以及減少程式的臭蟲,提高程式的可維護性。

但是,光是把程式碼,寫成函式,並不會讓你的程式變得更好,或是讓你的工作變得更輕鬆。你必須學習養成如何撰寫好的函式。好的函式,通常有以下的特質:

最好不超過一頁:太長的函式,通常不好維護,而且容易發生錯誤。
函式只執行一個特定的功能:如果,在一個函式裡面,執行多個功能時,通常必須把各功能,再切割成獨立的函式。這樣,才可以更模組化,在主程式組合這些功能時,能更有彈性。
好的函式,會有好名字:如果,你無法替你的函式,找出一個好名字的話,通常代表,你對函式的功能,沒有具體的認知。自然無法寫出好的函式。
我們使用範例,來學習如何撰寫函式:
1) 函式的語法。
2) 參數傳遞。
3) 預設參數。
4) 函式內變數的範圍。
5) 使用 include() 函式,來建立自己的函式庫。



[color=blue]5.1 函式的語法[/color]
撰寫函式時,在 function 保留字之後,接著是使用者自己命名的函式名稱。函式名稱之後,是由括弧所包含的是要交給函式處理的參數。視情況需要,函式可以接受任何數目的參數,包括不接受任何參數。之後,是由 { 和 } 所包含的程式區段。
函式的執行:在主程式呼叫函式之後,自 { 開始由上而下的順序,一直執行到 } 為止或碰到 return 的命令句時結束。
return 可以用來結束函式的執行,return 後面如果有接任何運算式,則會將運算式所得的結果,傳回給主程式。
實例:
[code]
function 函式名稱([參數 1, 參數 2, ...參數 n]){

程式碼

}
[/code]
實例: (無參數, 無回轉值)
[code]
<?php
function today(){      
     $ty = date("Y") - 1911;
     echo '民國 '.$ty.'年'.date("m月d日");
}


today();
?>
[/code]
實例: (無參數, 有回轉值)
[code]
<?php
function today(){
     $ty = date("Y") - 1911;
     return'民國 '.$ty.'年'.date("m月d日");
}
echo today();
?>
[/code]
實例: (有參數, 有回轉值)
[code]
<?php
function numberOptions($start, $end, $selected){
     $option = "";
     for($i = $start; $i <= $end; $i++){
          $list .= "<option value='$i'";
          if($i==$selected){
          $list .= " SELECTED";
          }
          $list .=">$i</option>";
     }
     return $list;
}
$yr = date('Y') - 1911;
$yr_start = $yr - 5;
$yr_end = $yr + 5;
$mn = date('m');
$dy = date('d');
$yr_option = numberOptions($yr_start, $yr_end, $yr);
$mn_option = numberOptions(1, 12, $mn);
$dy_option = numberOptions(1, 31, $dy);
?>
民國 <select name=year><?php echo $yr_option; ?></select>年
<select name=month><?php echo $mn_option; ?></select>月
<select name=day><?php echo $dy_option; ?></select>日
[/code]



[color=blue]5.2 參數傳遞[/color]
當其他部分的程式碼,呼叫函式,以變數當作參數,傳遞給函式時,實際上函式所接受到的是這個變數的值,所以,在函式中的程式碼,如果更改這個變數時,並不會影響到原本程式中的變數。這種參數的傳遞方式,稱之為值的傳遞。

另一種參數傳遞的方式,稱之為參照的傳遞。使用這種方式傳遞參數給函式處理時,當函式更改參數的值,原本程式的變數值也會跟著改變。使用參照傳遞方式,在函式的定義中,參數之前必須加上 & 符號。其他程式,呼叫這個函式時,必須在這個參數使用變數,不可以是其他的運算式 (如:常數、定數)。
實例:
[code]
<?php
function add_by_value($value, $increment){
     $value += $increment;
}
function add_by_reference(&$value, $increment){
     $value += $increment;
}
$n = 100;
$i = 50;
echo '原本 n 的值: '.$n.'<br />';
add_by_value($n, $i);
echo '值傳遞之後 n 的值: '.$n.'<br />';
add_by_reference($n, $i);
echo '參照傳遞之後 n 的值: '.$n.'<br />';
?>
[/code]



[color=blue]5.3 預設參數[/color]
函式使用預設參數時,呼叫函式的程式,可以不需要提供這個參數,而使用函式中所定義的參數預設值。
使用預設參數時,預設參數必須放在非預設參數的後面(右邊)。
實例:
[code]
<?php
function numberOptions($start, $end, $selected=3){
     $option = "";
     for($i = $start; $i <= $end; $i++){
          $list .= "<option value='$i'";
          if($i==$selected){
               $list .= " SELECTED";
          }
          $list .=">$i</option>";
     }
     return $list;
}
$number_options = numberOptions(1, 10);
?>
<select name=number><?php echo $number_options; ?></select>
[/code]



[color=blue]5.4 函式內變數的範圍[/color]
函式內所使用的變數,除非特別指定,均為區域變數。區域變數的範圍,只限定在定義這個變數的函式內。函式外即使有同名的變數,因為範圍不同,所以是另一個變數。兩者不會互相影響。
如果,在函式之內有特別指定變數範圍(在變數名稱之前,加上 global 保留字)。變數變成全域變數。
實例:
[code]
<?php
function local_scope(){
     $x = 5;
}
function global_scope(){
     global $x;
     $x = 10;
}
$x = 0;
echo '原本 x 的值: '.$x.'<br />';
local_scope();
echo '呼叫 local_scope() 函式之後, x 的值: '.$x.'<br />';
global_scope();
echo '呼叫 global_scope() 函式之後, x 的值: '.$x.'<br />';
?>
[/code]



[color=blue]5.5 使用 include() 函式,來建立自己的函式庫[/color]
到目前為止,所有的函式,都是寫在和主程式同一個網頁中,所以,只有這個主程式的網頁可以呼叫這些函式。
更好的做法,是把所有函式按照功能的類別,寫在同一個檔案。然後,在主程式中,使用 include() 或 include_once() 函式,將函式的檔案,含括在主程式中。透過含括檔案的方式,就可以把函式的功能,提供給其他的 PHP 網頁程式使用。
實例: (使用含括檔案的方式)
[code]
<?php
// 檔名: 110_07.php
function numberOptions($start, $end, $selected){
     $option = "";
     for($i = $start; $i <= $end; $i++){
          $list .= "<option value='$i'";
          if($i==$selected){
               $list .= " SELECTED";
          }
               $list .=">$i</option>";
     }
     return $list;
}
?>
<?php
// 檔名: 110_08.php
include("110_07.php");
$yr = date('Y') - 1911;
$yr_start = $yr - 5;
$yr_end = $yr + 5;
$mn = date('m');
$dy = date('d');
$yr_option = numberOptions($yr_start, $yr_end, $yr);
$mn_option = numberOptions(1, 12, $mn);
?>
民國 <select name=year><?php echo $yr_option; ?></select>年
<select name=month><?php echo $mn_option; ?></select>月
<select name=day><?php echo $dy_option; ?></select>日
[/code]

[[i] 本帖最後由 mastermind007 於 2006-8-13 10:47 編輯 [/i]]






















[color=red][b]6. PHP 物體導向程式設計[/b][/color]
PHP 支援物件導向程式設計,雖然就純粹的物件導向程式設計的觀點來看,它的支援並不是很完整,但是,只要我們遵循良好的程式設計習慣,我們還是可以善用 PHP ,來開發物件導向的程式。

[color=blue][b]I[/b][/color] 為什麼要使用物件導向的程式設計?

在物件導向程式設計的觀念提出之前,軟體開發者,大多是使用結構化的程式設計。所謂結構化的程式設計,就是把問題切割成各個比較小的問題,比較小的問題,如果還是複雜到無法以一個函式來解決時,就在切割成為更小的問題。直到可以用一個單一的函式來解決為止。每個函式處理個別的功能,主程式藉由呼叫各個函式,來完成他的工作。

在上一個帖子函式的應用,我們應用了結構化的程式設計,將留言版的功能分割成各個函式,各網頁藉由呼叫各函式的方式,完成存取留言版資料的工作。使用結構化的程式設計,的確簡化了我們撰寫程式的工作,也提高了程式的可維護性。但是,結構化程式設計在開發大型專案時,還是無可避免的碰到了他的瓶頸。因為,結構化的程式設計,專注於功能面(函式)的開發,而往往忽略了功能所要處理的資料。被處理的資料與功能在結構化的程式設計是分離的關係。在大型專案的開發上,由於要處理的問題,相對的要複雜許多,如果,資料與函式之間沒有關聯性,很容易發生錯誤,維護起來也很不方便。後來,物件導向程式設計的興起,就是為了解決,結構化程式設計所面臨的資料與功能分離的問題。

[color=blue][b]II[/b][/color] 物件導向程式設計的常用名詞:

i) 屬性 (Property):即物件裡的資料(變數)。
ii) 方法 (Method):即物件裡的功能(函式)。
iii) 成員 (Member):即類別裡所定義的變數或函式。
iv) 物件:類別的實例。
v) 類別:物件的定義。由使用者所定義的資料型態。

[color=blue][b]III[/b][/color] 物件導向程式設計的支柱

物件導向程式設計的三大支柱,稱之為 PIE (Polymorphism 多變, Inheritance 繼承, Encapulation 封裝)。由於,PHP 目前的版本只支援繼承及封裝,所以,我們在此,僅討論繼承與封裝。

所謂封裝,就是把功能與資料包裝起來成為一個物件,並定義物件的介面。讓外界的程式,透過物件所提供的介面,來與這個物件溝通。外界的使用者,無須知道,物件內部如何執行他的作業。只需要知道,如何使用物件的介面,來完成自己的工作即可。所以,設計物件的開發者,日後要更新物件的程式時,只要維持物件的介面不變,便可以確保,使用這物件的外部程式,不需要改寫,一樣可以執行。而外界程式的開發者,只要遵循不直接存取物件內部的功能及資料,僅透過介面來使用物件的規則,便可以確保程式執行無誤。

所謂繼承,就是子類別藉由繼承父類別的方式,取得父類別所定義的屬性及方法。通常,父類別會定義通用的屬性及方法,而子類別則延伸父類別定義特定的屬性及方法,以解決特定的問題。

[color=blue][b]IV[/b][/color] 如何使用物件導向程式設計來開發程式

使用物件導向的方式來開發程式,最主要的關鍵,在於程式設計觀念的改變。之前,我們使用函式來開發留言版的時候,我們著重在於找出留言版應該具有的功能,然後,按照功能來撰寫對應的函式。外界的網頁程式,把資料餵給這些功能,來完成它的工作。使用物件導向程式設計時,我們必須把程式所企圖解決的問題,看做是一個獨立的個體。在這個個體中,包含了它應該處理的資料,以及處理這些資料的功能。這些功能是為了處理這些資料所產生的。所以,在撰寫留言版的程式時,我們要把留言版當作是一個自給自足的個體。把程式所要解決的問題,定義成為個別的個體,這個過程稱之為抽像化 (Abstraction)。

當我們的腦子裡,有了這個個體所需要的資料以及功能後,我們就可以專注於定義這個個體的類別。把個體的資料,定義成類別的屬性;把個體的功能,定義成類別的方法。在定義類別時,先別管外界的程式如何運作,全心全力專注於如何按照這個個體的棖螅寫好這個類別。類別定義完之後,外界的程式,便可藉由物件變數,來使用這個我們定義的類?使用者定義的資料型態)。物件導向程式設計,名稱上雖然是物件,但是,實際上,程式設計師大部分的心力,在於找出問題中的個體,定義這個個體的類別。使用這類別的程式部分,反而花的時間不多。

在此帖中,我們將使用實際的例子,來實作 PHP 的物件導向程式設計。

[b]PHP 物件導向程式設計實例演練[/b]
說明:

我們使用範例,來撰寫類別:

i) 類別的語法結構。
ii) 封裝:定義屬性及方法。
iii) 使用物件:類別的實例化。
iv) 繼承。

[color=blue][b]1.[/b][/color] 類別的語法結構
[code]
class 類別名稱 [extends][父類別名稱]{

類別的定義

}
[/code]
說明:
i) 定義類別時,在 class 保留字之後,是使用者所定義的類別名稱。
ii) 如果,所定義的類別要繼承其他類別時,需加上 extends 保留字,然後,加上父類別的名稱。否則,省略 extends 和父類別名稱。
iii) 之後是由 { 和 } 所包圍的類別定義。在這裡,類別的定義,包括了屬性及方法。

[color=blue][b]2.[/b][/color] 封裝:定義屬性及方法。
[code]
class 類別名稱 [extends][父類別名稱]{

// 屬性的定義

var $變數名稱;

// 方法的定義

function 方法名稱([參數列]){

}

}
[/code]
說明:
i) 定義類別的個別屬性時,前面必須加 var 保留字。代表這變數是這個類別的屬性。
ii) 定義屬性時,可以給初始值。
iii) 定義方法時,規則同函式。
iv) 在方法中,如果要存取類別的屬性時,必須用 $this-> 變數名稱 這個格式。變數名稱在這裡,不可以加 $ 符號。
v) 如果,類別中的方法名稱與類別名稱相同時,這個方法稱之為這個類別的建構方法。建構方法在類別被實例化時執行。類別實例化,說白一點,就是在外界的程式中,產生這個類別的物件變數。
實例: (定義類別)
[code]
<?php
/* 檔名:111_01.php
定義 Dog 類別
*/

class Dog{
     var $food = '骨頭';
     var $name;

     function Dog(){
          echo '產生 Dog 類別的物件時,便會呼叫這個方法(建構方法)';
     }
     function Eat(){
          echo $this->name.'吃'.$this->food;
     }
}
?>
[/code]

[color=blue][b]3.[/b][/color] 使用物件:類別的實例化。
[code]
// 產生物件時
     $物件變數名稱 = new 類別名稱;
// 呼叫物件方法或存取屬性時
     $物件變數名稱->物件的方法或屬性;
[/code]
說明:
i) 要產生物件時,必須以一個變數來存放物件。
ii) 必須使用 new 保留字來產生物件。產生物件時,會執行這個物件的建構方法。
iii) 存取物件的屬性或呼叫物件方法時,物件與其成員之間,必須加 ->。
iv) 物件的屬性之前,不可加 $ 符號。
實例: (使用物件)
[code]
<?php
/*
檔名:111_02.php
使用 Dog 類別
*/
// 含括 111_01.php 定義 Dog 類別的 PHP 檔
include_once('111_01.php');
// 產生 Dog 類別的物件
$mydog = new Dog;
$mydog->name = '來福';
echo '<br>';
$mydog->Eat();
?>
[/code]

[color=blue][b]4.[/b][/color] 續承
說明:
i) 當子類別繼承父類別時,子類別取得父類別所有的成員(屬性及方法)。
ii) 在子類別的方法,要呼叫父類別的方法時,使用 $this-> 父類別的方法名稱。
iii) 父類別通常只定義通用的成員。
iv) 子類別延伸父類別原有的功能,可另行定義專屬於子類別的功能。
v) 當父類別的成員改變時,子類別的成員跟著改變。所以,藉著繼承的關係,可以讓我們的程式維護性大為提高。
實例:
[code]
<?php
/*
檔名:111_03.php        
定義 Pet, Dog, Cat 類別
*/
class Pet{
     var $food;
     var $name;
     var $language;
     function Pet(){
          echo '產生 Pet 類別的物件時,便會呼叫這個方法(建構方法)';
     }
     function Eat(){
          echo $this->name.'吃'.$this->food;
     }
     function Speak(){
          echo $this->name.'說'.$this->language;
     }
}
class Dog extends Pet{
     function Dog(){
          $this->food = '骨頭';
          $this->language = '汪汪';
          echo '產生 Dog 類別的物件時,便會呼叫這個方法(建構方法)';
     }
}
class Cat extends Pet{
     function Cat(){
          $this->food = '魚';
          $this->language = '喵喵';
          echo '產生 Cat 類別的物件時,便會呼叫這個方法(建構方法)<br>';
          $this->Pet();
     }
     function showFear(){
          echo $this->name.'怕水';
     }
}
?>
[/code]
[code]
<?php
/* 檔名:111_04.php
   使用 Dog, Cat 類別
*/
// 含括 111_03.php 定義 Pet, Dog, Cat 類別的 PHP 檔
include_once('111_03.php');
// 產生 Dog 類別的物件
$mydog = new Dog;
$mydog->name = '來福';
echo '<br>';
$mydog->Eat();
echo '<br>';
$mydog->Speak();
echo '<hr>';
$mycat = new Cat;
echo '<br>';
$mycat->Eat();
echo '<br>';
$mycat->Speak();
echo '<br>';
$mycat->showFear();
?>
[/code]

[[i] 本帖最後由 mastermind007 於 2006-8-18 17:15 編輯 [/i]]






















[color=red][b]7. MySQL 基本[/b][/color]
[color=blue][b]I[/b][/color] MySQL 簡介
什麼是 MySQL?MySQL 是小型企業或者個人網站用來儲存資料的資料庫,或稱資料庫。

[color=blue][b]II[/b][/color] 為何使用 MySQL?
一般上,大部分 PHP 網站都選擇與 MySQL 一同使用,那是因為 MySQL 與 PHP 結合不僅簡易,而且效率高。MySQL 本身也是一個效率高、速度快的資料庫,所以一般上我們選用 MySQL。

[color=blue][b]0.[/b][/color] 類型解釋
smallint
16 位元的整數。
interger
32 位元的整數。
decimal(p,s)
p 精確值和 s 大小的十進位整數,精確值 p 是指全部有幾個數 (digits) 大小值,s 是指小數
點後有幾位數。如果沒有特別指定,則系統會設為 p=5; s=0 。
float
32 位元的實數。
double
64 位元的實數。
char(n)
n 長度的字串,n 不能超過 254。
varchar(n)
長度不固定且其最大長度為 n 的字串,n 不能超過 4000。
graphic(n)
和 char(n) 一樣,不過其單位是兩個字元 double-bytes, n 不能超過 127。這個形態是為
了支援兩個字元長度的字體,例如中文字。
vargraphic(n)
可變長度且其最大長度為 n 的雙字元字串,n 不能超過 2000。
date
包含了 年份、月份、日期。
time
包含了 小時、分鐘、秒。
timestamp
包含了 年、月、日、時、分、秒、千分之一秒。

[color=blue][b]1.[/b][/color] 建立資料表
注意: 不包括 { 和 }
[code]
CREATE TABLE `{資料表名}` (
  `{字段名 1}` 類型 {NOT NULL 或 NULL} default '{起始值}',
  `{字段名 2}` 類型 {NOT NULL 或 NULL} default '{起始值}',
  `{字段名 3}` 類型 {NOT NULL 或 NULL} default '{起始值}',
  `{字段名 4}` 類型 {NOT NULL 或 NULL} default '{起始值}'
) ENGINE={儲存引擎} DEFAULT CHARSET={編碼};
[/code]
實例:
[code]
CREATE TABLE `cdb_testing` (
  `na` varchar(50) NOT NULL default '',
  `pr` int(10) NOT NULL default '0',
  `si` int(10) NOT NULL default '0',
  `fsi` int(10) NOT NULL default '0',
  `f` varchar(50) NOT NULL default '',
  `gar` varchar(255) NOT NULL default '',
  `p` int(1) NOT NULL default '2',
  `at` int(10) NOT NULL default '1',
  `pro` int(10) NOT NULL default '100'
) ENGINE=MyISAM DEFAULT CHARSET=gbk;
[/code]

[color=blue][b]2.[/b][/color] 刪除資料表
注意: 不包括 { 和 }
[code]
DROP TABLE `{資料表名}`
[/code]
實例:
[code]
DROP TABLE `cdb_testing`
[/code]

[color=blue][b]3.[/b][/color] 覆蓋原有資料表
注意: 不包括 { 和 }
[code]
DROP TABLE IF EXISTS `{資料表名}`;
CREATE TABLE `{資料表名}` (
`{字段名 1}` 類型 {NOT NULL 或 NULL} default '{起始值}',
`{字段名 2}` 類型 {NOT NULL 或 NULL} default '{起始值}',
`{字段名 3}` 類型 {NOT NULL 或 NULL} default '{起始值}',
`{字段名 4}` 類型 {NOT NULL 或 NULL} default '{起始值}'
) ENGINE={儲存引擎} DEFAULT CHARSET={編碼};
[/code]
實例:
[code]
DROP TABLE IF EXISTS `cdb_testing`;
CREATE TABLE `cdb_testing` (
  `na` varchar(50) NOT NULL default '',
  `pr` int(10) NOT NULL default '0',
  `si` int(10) NOT NULL default '0',
  `fsi` int(10) NOT NULL default '0',
  `f` varchar(50) NOT NULL default '',
  `gar` varchar(255) NOT NULL default '',
  `p` int(1) NOT NULL default '2',
  `at` int(10) NOT NULL default '1',
  `pro` int(10) NOT NULL default '100'
) ENGINE=MyISAM DEFAULT CHARSET=gbk;
[/code]

[color=blue][b]5.[/b][/color] Discuz! 插件區的一些資料庫工具

5.1 多論壇資料庫合併工具[Database Merger] For DZ4.1
[url]http://www.discuz.net/viewthread.php?tid=319251[/url]
5.2 資料庫編碼管理工具 For D3/4/5
[url]http://www.discuz.net/viewthread.php?tid=352108[/url]
5.3 資料庫管理器 for 4.1
[url]http://www.discuz.net/viewthread.php?tid=341357[/url]
5.4 PerfectWorks [非賣品] 讓數據不再?????的資料庫升級工具
[url]http://www.discuz.net/viewthread.php?tid=348748[/url]
5.5 MYSQL 資料庫編碼轉換、數據導入恢復工具!
[url]http://www.discuz.net/viewthread.php?tid=241296[/url]

[[i] 本帖最後由 mastermind007 於 2006-8-29 21:43 編輯 [/i]]






















[color=red][b]8. MySQL: SQL 基本語法[/b][/color]
[color=blue][b]I[/b][/color] 現在將承接上面的,我們現在將使用更多種 SQL 語法
[color=blue][b]II[/b][/color]下面介紹的語法是在 Discuz! 後台和 資料庫工具 升級資料庫時能用到的,至於 SELECT 語法,會在下一帖討論

[color=blue][b]1.[/b][/color] 在原有資料表中加入字段
[color=blue]1.1[/color] 多資料表
注意:不包括 { 和 }
[code]
ALTER TABLE `{資料表名}` ADD `{字段名 1}` 類型 DEFAULT '{起始值}' {NOT NULL 或 NULL};
ALTER TABLE `{資料表名1}` ADD `{字段名 2}` 類型 DEFAULT '{起始值}' {NOT NULL 或 NULL};
ALTER TABLE `{資料表名2}` ADD `{字段名 3}` 類型 DEFAULT '{起始值}' {NOT NULL 或 NULL};
[/code]
實例:
[code]
ALTER TABLE `cdb_te` ADD `tts` INT( 8 ) DEFAULT '1' NOT NULL;
ALTER TABLE `cdb_test` ADD `ton` INT( 10 ) DEFAULT '1' NOT NULL;
ALTER TABLE `cdb_testiing` ADD `tgt` VARCHAR( 1 ) DEFAULT '1' NOT NULL;
[/code]
[color=blue]1.2[/color] 單資料表
注意:不包括 { 和 }
[code]
ALTER TABLE `{資料表名}`
ADD `{字段名 1}` 類型 DEFAULT '{起始值}' {NOT NULL 或 NULL} ,
ADD `{字段名 2}` INT( 8 ) 類型 DEFAULT '{起始值}' {NOT NULL 或 NULL} ,
ADD `{字段名 3}` INT( 8 ) 類型 DEFAULT '{起始值}' {NOT NULL 或 NULL} ,
ADD `{字段名 4}` INT( 8 ) 類型 DEFAULT '{起始值}' {NOT NULL 或 NULL} ;
[/code]
實例:
[code]
ALTER TABLE `cdb_test`
ADD `oic` INT( 8 ) NOT NULL ,
ADD `ar` INT( 8 ) DEFAULT '0' NOT NULL ,
ADD `cr` INT( 8 ) DEFAULT '1' NOT NULL ,
ADD `ge` INT( 8 ) DEFAULT '2' NOT NULL ,
ADD `au` VARCHAR( 10 ) DEFAULT 'test' NOT NULL ;
[/code]
[color=blue]1.3[/color] 更改字段設置
注意:不包括 { 和 }
[code]
ALTER TABLE `{資料表名}` CHANGE `{原有字段名}` `{新的字段名(可保留原有)}` {新的類型(可保留原有)} DEFAULT '{新的起始值(一樣可保留)}' {NOT NULL 或 NULL};
[/code]
實例:
[code]
ALTER TABLE `cdb_te` CHANGE `tts` `ttsg` INT( 9 ) DEFAULT '32' NOT NULL;
[/code]



[color=blue][b]2.[/b][/color] 在原有資料表中刪除字段
[color=blue]2.1[/color] 多資料表
注意:不包括 { 和 }
[code]
ALTER TABLE `{資料表名}` DROP `{字段名 1}`;
ALTER TABLE `{資料表名 1}` DROP `{字段名 2}`;
ALTER TABLE `{資料表名 2}` DROP `{字段名 3}`;
[/code]
實例:
[code]
ALTER TABLE `cdb_te` DROP `tts`;
ALTER TABLE `cdb_test` DROP `ton`;
ALTER TABLE `cdb_testiing` DROP `tgt`;
[/code]
[color=blue]2.2[/color] 單資料表
注意:不包括 { 和 }
[code]
ALTER TABLE `{資料表名}`
DROP `{字段名 1}` ,
DROP `{字段名 2}` ,
DROP `{字段名 3}` ,
DROP `{字段名 4}` ;
[/code]
實例:
[code]
ALTER TABLE `cdb_test`
DROP `oic` ,
DROP `ar` ,
DROP `cr` ,
DROP `ge` ,
DROP `au` ;
[/code]

[color=blue][b]3.[/b][/color] 更新某一字段的值
[color=blue]3.1[/color] 更新所有資料。
注意:不包括 { 和 }
[code]
UPDATE `{資料表名}` SET `{字段名 1}`= '{新的值 1}', `{字段名 2}` = '{新的值 2}'
[/code]
實例:
[code]
UPDATE `cdb_test` SET `ton`= '2', `ar` = '5'
[/code]
說明:
i) 升級了這句語法後,cdb_test 中 的 ton 字段數值就變為 2 , ar 字段數值就變為 5 了
ii) 執行這個句型的命令,會更新資料表中所有的紀錄。
iii) 使用 UPDATE 更新資料時,一定要指定所要更新的字段以及更新的值。
iv) 如果更新的字段超過一個時,每組字段=值,必須以逗號區隔。
[color=blue]3.2[/color] 更新特定資料。
注意:不包括 { 和 }
[code]
UPDATE `{資料表名}` SET `{字段名 1}`= '{新的值 1}', `{字段名 2}`= '{新的值 2}' WHERE {條件}
[/code]
實例:
[code]
UPDATE `cdb_test` SET `ton`= '2', `ar` = '5' WHERE ge<9
[/code]
說明:
i)要更新特定資料時,可以在後面加上 WHERE 條件子句,來限定要更改的紀錄。

[color=blue][b]4.[/b][/color] 添加字段的值
注意:不包括 { 和 }
[code]
INSERT INTO `{資料表名}` (`{字段名 1}`, `{字段名 2}`, `{字段名 3}`) VALUES ('{值 1}', '{值 2}', '{值 3}');
[/code]
實例:
[code]
INSERT INTO `cdb_testing` (`ton`, `ar`, `kg`) VALUES ('qut', '1', '99');
[/code]
說明:
值 1 為 字段名 1 所添加的值
值 2 為 字段名 2 所添加的值
值 3 為 字段名 3 所添加的值

[color=blue][b]5.[/b][/color] 刪除資料表中的紀錄
[color=blue]5.1[/color] 刪除所有紀錄
注意:不包括 { 和 }
[code]
DELETE FROM `{資料表名}`
[/code]
實例:
[code]
DELETE FROM `cdb_test`
[/code]
說明:
i)執行這個句型的命令,會刪除資料表中所有的紀錄。


[color=blue]5.2[/color] 刪除特定資料。
注意:不包括 { 和 }
[code]
DELETE FROM `{資料表名}` WHERE `{字段名 1}` = '{值1}' AND `{字段名 2}` = '{值 2}' AND `{字段名 3}` = '{值 3}';
[/code]
實例:
[code]
DELETE FROM `cdb_settings` WHERE `ton` = 'qut' AND `ar` = '1' AND `kg` = '99';
[/code]
說明:
i)要刪除特定資料時,可以在後面加上 WHERE 條件子句,來限定要刪除的紀錄。
其他 SQL 相關:
[url]http://www.discuz.net/thread-337688-1-1.html[/url]
[url]http://www.discuz.net/viewthread.php?tid=337688&extra=page%3D1&page=2[/url]
實用手冊
[url]http://www.discuz.net/thread-378437-1-1.html[/url]

[[i] 本帖最後由 mastermind007 於 2006-8-29 16:17 編輯 [/i]]






















[color=red][b]9. PHP 與 MySQL 結合[/b][/color]
我們在本帖將初步探討 PHP 與 MySQL 的結合
[color=blue][b]1.[/b][/color] SELECT 字句
說明:
SELECT 句型,是用來對資料庫作查詢之用。資料庫在執行 SELECT 命令之後,會傳回查詢的結果。以下分別介紹各種 SELECT 句型的用法:
i) 基本句型
i) 萬用字元
iii) 使用 WHERE 子句,作為過濾查詢的條件。 [上一帖已經稍微解釋過,這裡再深入解釋]
iv) 使用 ORDER BY 子句,來定義排序的欄位,以及排序的方式。
v) 使用 LIMIT 子句,設定查詢結果的範圍。
[color=blue]1.1[/color] 基本句型
注: 不包括 { 和 }[code]SELECT {字段名 1}, {字段名 2}, {字段名 3}, ……{字段名 N} FROM {資料表名};[/code]說明:
i) 上面的句型,表示選取資料表中所有紀錄,並按照:欄位 1, 欄位 2, ...,欄位 N 的方式,分欄位排列查詢的資料。
ii) 每個欄位以逗號區隔。
iii) 句型中的 SELECT 和 FROM 都是 SQL 的保留字。
iv)SQL 語法,除了資料表名稱及欄位名稱之外,並不區隔字母的大小寫。所以,你也可以寫成:Select 欄位 1, 欄位 2, ...,欄位N from 資料表。
實例:[code]SELECT m.adminid, p. authorid, mf.uid FROM cdb_threads;[/code][color=blue]1.2[/color] 萬用子元
注: 不包括 { 和 }[code]SELECT * FROM {資料表名}[/code]說明:
i) 星號 * ,代表所有欄位。
ii) 如果需要顯示所有欄位時,一一輸入欄位名稱的方式,不但麻煩,而且容易因為輸入錯誤,而產生問題。所以,使用星號可以簡化我們撰寫 SELECT 命令的工作。
[color=blue]1.3[/color] WHERE 字句
注: 不包括 { 和 }[code]SELECT {字段名 1}, {字段名 2}, {字段名 3} FROM {資料表名} WHERE {條件}[/code]說明:
i) WHERE 子句,用來定義查詢所要過濾的條件。
ii) 只有符合 WHERE 子句條件的紀錄,才會被選取。
iii) 條件的內容,通常是以欄位來比對某特定的值。要特別注意的是,如果,被比對的值,其資料型態不是數值時,前後必須使用單引號框住。
iv) 以下是常用的比較運算符號:[table=50%][tr][td][b][u]運算符號[/u][/b][/td][td][b][u]意義[/u][/b][/td][/tr][tr][td]=[/td][td]等於 [/td][/tr][tr][td]!= 或 <> [/td][td]不等於 [/td][/tr][tr][td]> [/td][td]大於 [/td][/tr][tr][td]>= [/td][td]大於等於[/td][/tr][tr][td]< [/td][td]小於 [/td][/tr][tr][td]<=[/td][td]  小於等於[/td][/tr][tr][td]LIKE[/td][td]  字串的樣式比對。可用%萬用字元。[/td][/tr][/table]v)WHERE 子句中的條件,可以用 AND、OR、NOT 等邏輯運算子,來組合成更複雜的查詢條件。
vi) 條件中的欄位,不一定要出現在 SELECT 的欄位中。
[color=blue]1.4[/color] ORDER BY 子句
注: 不包括 { 和 }
[code]
SELECT {字段名} FROM {資料表名} {WHERE 子句} ORDER BY {字段名} {排序方式};
[/code]
說明:
i) ORDER BY 後面必須接字段,表示使用這個字段來排序。
ii) 排序方式有兩種:昇冪 (ASC),和降冪 (DESC)。
iii) 如果未指定排序方式時,預設是昇冪的排序。
iv) 字段名可以用資料表的欄位名稱,使用字段名稱時,這個字段不一定要出現在 SELECT 所列出來的欄位中。
v) 字段也可以用數字來表示。這個數字是 SELECT 所列出來的字段順序,起始值為 1。
vi) WHERE 字句可加也可不加
實例:
[code]
SELECT ar FROM cdb_testing WHERE gm>1 ORDER BY gg DESC;
[/code]


最近沒空,但將在這幾個星期給搞出來:)

[[i] 本帖最後由 mastermind007 於 2006-8-29 16:31 編輯 [/i]]






















[color=red][b]10. 與 Discuz! 結合[/b][/color]
插件設計相關
[url]http://www.discuz.net/usersguide/plugins_design.htm[/url]

[[i] 本帖最後由 mastermind007 於 2006-8-29 16:22 編輯 [/i]]
頁: [1]
查看完整版本: PHP & MySQL 初級教程