+------+----------+----------+-------------+ . }" ?+ \& I7 ] s" i/ N& G0 k$ @
| idx | UserName | LastName | FreeText |
q. {2 ~& B6 }; {3 K3 n+ V+------+----------+----------+-------------+
& I. ?' L+ i& C/ O3 }0 x; G9 I| 1 | Rafi | Ton | Just a test |
9 Y8 V* ?( }( R+------+----------+----------+-------------+ 6 v# D6 ~3 L. Z$ f2 F
1 row in set (0.00 sec) % T/ Y9 o, a' C( T
! M6 p3 A7 [) z, J 現在我們可以看到表的結構和每一個單元格的內容。 * R& W+ ]4 O* D5 E. S0 E+ D
& X9 N/ p# ]% H+ K6 N9 D 現在我們想刪除數據。為了實現我們應該鍵入: 1 j0 f3 j( Q2 v2 |
5 c! `, g+ @) r/ wMySQL> delete from tbl where idx=1 limit 1;<回車> Query OK, 1 row affected (0.00 sec) 2 }/ l" \$ G' C$ Q; O
+ M7 A+ \* `' D. l1 b6 y
好,給出一些解釋。我們正在告訴MySQL從"tbl"表中刪除記錄,刪除那些idx字段值為1的記錄,並且 + R) n8 [0 J. u X8 ^' v( V
只限制刪除一條記錄。如果我們不限制刪除記錄數為1,那麼所有idx為1的記錄都將被刪除(在這個例子中 $ z4 o# f$ B% e2 S
我們只有一條記錄,但是雖然如此,我只是想讓這一點更加清楚)。
: }9 p) @; d: K& O% @& P( Y3 L* Q/ i7 j
不幸的是,我們又一次得到了一個空表,所以讓我們再輸進去:
! P/ V7 A" y4 C: b0 {
, r. G/ `6 b7 J( x4 \/ D' l1 OMySQL> insert into tbl values (1,'Rafi','Ton','Just a test');<回車>
+ u" Z, s1 o9 l- \9 G$ C1 mQuery OK, 1 row affected (0.04 sec) 9 \$ u4 T! D& C0 D
8 N! R- o& O9 L( b, `$ [ 另一件可以做的事是,修改指定字段的內容,使用"update"命令:
6 f0 ~+ [) s r3 O; E* `" o' q% ?0 r2 |" k
MySQL>update tbl set UserName='Berber' where UserName='Rafi';<回車> * c. }, R6 F4 I, k+ L4 |
Query OK, 1 row affected (0.01 sec) 6 x5 B. J: b' B& U5 ~
Rows matched: 1 Changed: 1 Warnings: 0 / { a0 l8 s+ q
+ b: D( \8 d" m) K4 s5 }8 P
這個命令將搜索所有UserName為"Rafi"的記錄,並將它改為"Berber"。注意,set部分和where部分不一
: s/ a6 _5 V+ a* n: I. B定要一樣。我們可以索搜一個字段但是改變另一個字段。而且,我們可以執行兩個或更多條件的搜索。
1 l( P% Y* M# c! D8 Z1 L: K& f( r* ~
MySQL>update tbl set UserName='Rafi' where UserName='Berber' and LastName='Ton';<回車> 0 S/ u) s5 z* g8 g* V' v
Query OK, 1 row affected (0.04 sec) ! r+ ]7 f* @, w1 C$ B9 ^0 ~( K
1 U$ @6 x' C. c4 A 這個查詢搜索了兩個字段,改變了UserName的值。 . [0 ]/ s; G% q3 U) U n: E
7 n% `: w/ x+ h% O% k第三部分 - 組合PHP與MySQL
) K& O9 \0 y8 x0 N5 N7 ?' b# e
5 Z% }0 u! b2 w2 h. i 在這個部分裡,我們將建立一個建單的基於PHP的web站點,用來控制前面所建的MySQL的表。
; l/ O1 i0 I# I4 l$ g; L- r3 \7 _: {4 a- u% n4 C
我們將建立下面的站點結構(假設你已經知道一些基本的HTML的知識):
4 E t- m, D$ [" R0 _/ j& y
: }* V" |) e d$ @1 Y& f" N$ W. c0 Q- E 1. index.php3 用於前端查看表 8 [8 G! ], K+ c8 V1 w" [2 ?" `
2. add.php3 用於往表中插入數據 5 z4 o, n {8 m
3. Modify.php3 用於修改表中的記錄
0 r1 }! W1 l, F! C" }% n& R 4. del.php3 用於刪除表中的記錄
+ f) `- [1 ?0 E, } }$ R5 `/ a& O- @/ C' m3 ` X& R# a3 A7 ?, Q f
首先,我們想查看一下數據庫:
, F" [9 V6 T: G3 P+ a5 p* Z8 Z% r8 J# r$ R! z" [3 l; f6 F# G
看一下下面的腳本。
3 i% ^. f% ]+ U1 g
7 Q9 X9 @& i! W1 X# E-------------------------------------------------------------------------------- / x# F7 p% b9 a2 t4 Y3 T q" S
Index.php3:
2 m$ N1 @& u7 a* k8 u8 s* M( E( B5 N& m6 I! B/ N2 Q
<html> 8 w9 |6 m* C7 e6 h
<head><title>Web Database Sample Index</title>
, ^5 ]' Z; c- t% |2 I6 R</head>
" R" k! @9 I6 a) E2 T<body bgcolor=#ffffff> 0 W1 H# W$ X! i5 a! m& k
<h2>Data from tbl</h2> 8 h' B2 V6 ?0 C4 e5 v; `
* Y- |, i* V# j
<?
8 O7 k" y- m8 }/ ^: ]! R4 Zmysql_connect() or die ("Problem connecting to DataBase"); : U" S, E, h* @/ Z* \# G {! D' J* k
$query = "select * from tbl";
# u9 f0 r2 ~, P: }7 ]$result = mysql_db_query("example", $query);
9 v9 n" b# Z4 M: b: A+ D: L2 @% h' [$ O5 V- ]
if ($result) { 5 a, }5 N0 \0 f4 K6 `4 ^
echo "Found these entries in the database:<br><p></p>";
7 u9 Z1 D! A8 `" Q6 }5 Q& ?echo "<table width=90% align=center border=1><tr> . O3 _2 b' c4 y% A5 H Y2 B: j( U
<td align=center bgcolor=#00FFFF>User Name</td>
, J$ F! B& V, O+ V+ r<td align=center bgcolor=#00FFFF>Last Name</td>
' m/ Z2 l- V% n' `9 O% e% K" l<td align=center bgcolor=#00FFFF>Domain Name</td> ' f. E* t0 o, s$ n* X
<td align=center bgcolor=#00FFFF>Request Date</td>
4 F% l& Q8 ?! M7 S8 K; i</tr>"; - j% Q0 t; q) g1 f
8 A6 V. p% x* | A' i2 h9 Jwhile ($r = mysql_fetch_array($result))
! U" M) j& [- Q8 _ j3 F' J- W{ 0 v+ ~2 w& K3 W' |
$idx = $r["idx"];
U: t1 I' H" I6 \& [6 Z/ H- f& I$user = $r["UserName"];
8 X# {, e; j4 I3 r; n. i$last = $r["LastName"]; 4 N3 v. a+ n% y& y1 a# e i' w
$text = $r["FreeText"];
: v- M1 _ x, g; h+ N4 i
( t- j; U$ x$ ^' Z6 z- h" yecho "<tr> 9 R/ R5 n' V0 e8 l9 I4 g! C4 ~
<td>$idx</td> + e {! k: F T8 K! t% k d0 \) A
<td>$user</td> # ^3 t9 O2 y. i% Y$ a* {
<td>$last</td>
2 R5 n: r0 |3 z<td>$text</td>
# b9 t6 C3 N/ d$ n! o</tr>"; 3 @6 i7 _, ?% ]% b
}
) e( q9 w2 j [7 S) Mecho "</table>";
8 H2 { `& l! u1 d% U$ o! T8 U} 9 M0 W" p8 Y. s- j c
else
6 T( K. f, o8 ]7 m( B1 F! x1 V{
1 H" n( f. Y5 H, O0 S2 ^: h; Wecho "No data.";
. E/ n7 `& B( _' l* a0 r} 2 A; n( p3 Y1 D; i, T2 A
( V/ {9 p' L+ r. W" N
mysql_free_result($result);
4 |7 ]9 s7 {0 dinclude ('links.x'); z# |0 A: n, F# {; r4 B8 D, E
?> 6 X, I- {" G5 r# u5 s r
% T5 C% q( f9 z- Q* {& d: n+ R
</body> 2 Y# c" f- m! f- e4 M
</html>--------------------------------------------------------------------------------
$ o7 ^% @, I# n( F( o$ k 好,下面給出一些說明: * @ d+ p9 f3 k' B' \7 I0 I
" i( ~* @- P& x& T. ^ 我們先用正常的html標籤創建thml文檔。當我們想從html中出來轉入PHP中時,我們用<?來打開PHP部分,
* {5 O0 G7 m$ C: l這個告訴web服務器將後面的文本看成是PHP語法而不是一般的html。使用?>來結束PHP部分。
* p& e, ?! \1 w; P( h* {; [( A7 _" [) _/ V4 R0 @
mysql_connect() 命令告訴PHP建立一個與MySQL服務器的連接。如果連接建立成功,腳本將繼續,如果
7 H' V U2 |1 ~. y7 E不成功,則打印出die命令的信息「Problem connecting to Database」(如果要看關於mysql_connect的更
4 y+ _6 t' {) c0 B) S4 I多的信息和其它的PHP函數,可以去http://www.php.net下的文檔中查找)。
0 E9 x. a& |" B+ v; s0 P% Q; `( o, i4 R
現在,如果MySQL是按照我們上面所討論的那樣安裝的,就足夠了。但是如果你使用的是預裝的MySQL(象
* o8 B- e' A% ]7 ?8 e, J8 B2 J0 DISP),你應該使用下面的命令:
2 M4 F- U2 {$ P" ?/ U2 I% Q
# A# k F+ d9 I# [mysql_connect (localhost, username, password);
; l/ w1 q1 @6 {4 ^! t
7 |9 P: r! B8 A* F4 T" h" h6 s 我們可以將$query設成我們想在MySQL中執行的查詢,然後使用mysql_db_query命令來執行它:
7 p4 h7 E1 {- v+ @. b& V1 w3 U$ k8 Y# F0 M
$result = mysql_db_query("example", $query); # e* h' c- `9 y5 O2 Y
4 ]! W! D! a M2 v2 t 這時,"example"表示數據庫的名字並且$query是要進行的查詢。
n# U: d! F9 w
, s3 d; O' i- {: \+ P: X4 i 我們使用MySQL命令select(象上面所描述的)來從表中取得所有的數據: 0 `) k% n; e% @! y; f# a
`4 z0 c4 m7 W2 K( U
$query = "select * from tbl";
$ n/ x; O, C$ p4 [5 M
- O$ D$ W6 U4 {; n 簡單地解釋一下$result的作用,如果執行成功,函數將返回一個查詢結果的一個MySQL結果標識符,如 " R& {- P# [% Q, \$ R5 t, x
果出錯則返回false。返回的不是結果而是一個標識符,可以在後面將它轉換成我們所需的信息。
9 ?" I8 i9 J! X" A5 ~# i: `1 R
% n+ p2 D/ G: o( P D* `, b! T/ Q 現在,我們想檢查一下在數據庫中是否存在有記錄,並且如果有則將結果按照html的表格結構打印出來。
$ t8 E& N6 k( h. S p8 H v6 ^) o* ^0 _+ j- V$ Y) `) G# \& Y
為了檢查是否存在數據,我們使用if命令和下面的語法: ) c5 B0 y, t) {6 x4 w! G
' l2 @( W4 T& X& H8 iif (argument) { , l+ A* L& K! o R* D
"do something;"
8 x: C5 o# y- S: X9 d* J} else { ' o2 W, C9 n9 l- O( S
"do something different;" 6 I- A- Q9 _* A6 o2 w9 P& r& v
} # W/ _/ s$ ~6 g- \. [+ a3 m3 V2 u
, Z3 ?+ Z( \; ]5 O 這時"do something"當argument=true時你所要執行的命令,"do something different"為當argument =
% X, e# b. A ifalse時所要執行的命令。 - N3 T4 x. h* }: X
2 W7 M- I/ R' H3 U/ T 注意我們使用echo命令來輸出一些html標籤來建立html的表格結構。只有從PHP命令輸出的文本才會被 % t' y2 Y7 f0 \. u
看成html內容 - PHP命令本身是不會看成html內容的。 / a2 n! V1 a& x+ ]+ D X/ K
6 _2 j6 C; M% @0 k% m
我們使用的另一個命令是while指令,使用格式如下: ' l& r1 b- e" \
G+ k* n" |6 ^- R$ G. J7 F4 B% R! n
while (argument)) {
; q. t6 v8 n* |/ M) ^" x- {/ L"something to do";
# Z+ f2 i* p' {1 b: d} 2 r0 q: K; X* I6 g3 `2 |( J; ^/ }
9 W0 q8 A( |# a, n# E
while循環在argument=true時會不停地重複,執行在{}中的指令集。
( D: \3 G2 J1 _ V! e2 r9 r9 s0 E3 y
這裡我們組合了while循環和PHP函數$r=mysql_fetch_array($result)。這個函數根據相應的結果標識 ; \ r/ n$ Q* c& P; S n
符取回一條記錄,並且將結果放在一個相關數組(associative array)$r中,它使用字段的名字作為數組的 ! t3 G6 V) b7 d8 \1 Q) }, J
鍵值。在我們的腳本中,我們將得到一個數組:$r['idx'],$r['UserName'],$r['LastName']和
$ p; M* p) n0 i; l/ [. ^* [$r['FreeText']。 3 P* g/ J+ w4 x @$ s- s( T% y8 S
2 }6 y4 L( _, L* K) t$ \
我們也可以使用mysql_fetch_row函數,它會將結果放在一個有序的數組中,我們可以使用$r[0],$r[1],
; J, Q9 C" G: Q6 m. P$r[2]和$r[3]來得到相應的值。 4 A% G# v4 ?5 W8 i2 G2 O) ]* z
2 T- [5 d; a2 f 要瞭解關於這些函數的更深入的信息請訪問http://www.php.net。
1 `% F1 o* p% _2 c2 B" k) c5 n4 K4 [* j: |% m
現在,我們有了所有的信息,我們可以把它在html表格中打印出來:
+ h) h# o# \: ^5 W$ [ H; \& Q, W
7 m7 x* }2 q' T Z ( x9 l7 K& J4 k& m6 _+ ?
& H6 g* w( D/ ]2 P; ]3 K" s( Q
echo "<tr> ) \7 n$ [+ y4 x) e# y- i o/ z6 B
<td>$idx</td> 7 C( m/ ~/ P) f/ n
<td>$user</td>
" V# p. a4 b4 b- v& I: ?<td>$last</td>
- L4 _8 i$ G+ F# | c<td>$text</td> 7 \! |( Z6 a% ?9 V4 H
</tr>"; / }4 v2 g7 W5 f# [, ~3 U( o
7 Z* B) q: o6 H' P( V' z/ i! O. h6 f: C 現在我們可以釋放MySQL連接,並且釋放一些資源,通過使用mysql_free_result($result)函數。
- @) A* }+ y) Z4 ` j# u0 j9 A* ~" k6 l& @$ T' {" v& {
PHP另一個有用的特性是在腳本中包括文本文件的功能。讓我們假設你有一些可重用的代碼(例如到其
" i. j6 d& E7 ^它頁面的鏈接),我們可以使用include函數,這樣可以節省一些代碼和時間。而且,如果想改變這些代碼, 0 W9 _- t- _# M) ?% H* |, v9 u
我們只需要改變包含文件的內容,它將會在所有包括它的文件中生效。 " f# I- X" K, K
. E" t# p% \0 o6 Q& v
這裡我們創建一個名為Links.x的文本文件,它將存放我們想用在每一個頁面中的全部鏈接菜單。
4 D) o3 P7 s3 L5 b! L3 t: {% B( ]; K) {0 s) i. d; D, t( q
/ c9 v" H! b7 K: }! r. c0 c
<p></p>
: M$ m1 ]- ?3 N<ul>
- P5 }! O s3 o, S, G<li><a href="index.php3">Home</a>
0 g, B y$ q# c/ b' K<li><a href="add.php3">Add a new entry to the DataBase</a>
0 H' m" g% ]5 J. s+ \! N$ Q1 U<li><a href="edit.php3">Edit an entry</a> ( `8 m" i9 p1 V3 W! {# I4 t5 S" U
<li><a href="del.php3">Delete an entry from the DataBase</a>
- Y0 t) E6 B( J I6 ~8 Z</ul> |