返回列表 发帖

[Zend权威认证试题讲解]第九章 - PHP与数据库

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
: R+ w9 X: l. OPHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。' f; ]! W& P: I' E( X: k3 k
本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
. r7 l) |9 V( k* ]/ w
5 x" G$ [3 n4 u0 t8 _+ j# C/ [5 [" R4 d2 _
问题6 ?) N5 t: ?: v$ e9 {+ Z. q
2 V2 s* V5 y# ^; Q% ^/ K( H
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)
: J3 x/ }) Q* ^* d. q  Q6 \3 z2 j5 H- K7 d! j3 Z' W
SELECT * FROM MY_TABLE# h2 V( X& i6 j5 W3 t+ Y& Z3 }
3 `, d( a: e% Z4 r5 w
A.如果可能,用把查询转换成存储例程
8 j0 D& }4 U/ K  P. sB.如果程序允许,给查询指定返回记录的范围
$ k2 D) x9 P6 \' ~8 WC.如果可能,添加where条件9 c  `8 T) M, Q% {1 p! A8 \
D.如果DBMS允许,把查询转换成视图8 Y* [* h% N0 ]1 G" U+ X1 ?
E.如果DBMS允许,使用事先准备好的语句0 x  V9 J- K* u/ P: C* k
9 Z* O5 F, {2 t  U

* w! X- o. ?1 _5 `$ x2.可以用添加______条件的方式对查询返回的数据集进行过滤?
& s5 j/ m) e- C' Q& e3 Y
3 J# z, y" U3 k7 C' m: ^4 ?& J答案:____________8 x# z1 _( P" P6 Q2 e

/ Y' N7 x( E! T$ S2 G& s8 W- V! W1 W
3.内关联(inner join)是用来做什么的?
( s: Z% g) G& p3 {; J
7 x0 h( s0 S" Q! BA.把两个表通过相同字段关联入一张持久的表中
8 C5 V& C8 ?; v! f: D& o! i& j  ^B.创建基于两个表中相同相同行的结果集
. P9 q( J, Z. |, O, `  BC.创建基于一个表中的记录的数据集
: |2 \& l4 \0 q' ED.创建一个包含两个表中相同记录和一个表中全部记录的结果集4 N  u7 Z/ E* f, O
E.以上都不对7 }  g" |% |7 T
/ {$ i  d$ d3 j6 I( j
: M0 M9 J  b1 b; @+ }- Q. U
4.以下哪个DBMS没有PHP扩展库?
! \* `( ?$ Z: F3 ?' O0 U% V4 g9 t' M% a% g1 e' I
A.MySQL# Z0 z& L" |' h& j
B.IBM DB/2
/ l6 L8 D7 ]2 z6 Y- t" M4 V9 JC.PostgreSQL
- p% b, t$ t  X9 SD.Microsoft SQL Server  Q5 f$ [; Q8 g* d
E.以上都不对; f8 O2 V% w7 f) f

( _' _; U& t& t) ]. L3 Q2 F- t; ~/ C# Z( ^
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
2 h5 p5 ]; h0 z8 x) ~) l( ~8 N1 R3 N3 a) e! k' o0 d
<?php9 n: W( I6 E3 `; Y7 e
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
8 F! ]6 ]# m) {; h' Z3 x?>( S. W' D, O3 U

9 X5 L3 X9 E$ A* DA.MYTABLE表中的记录超过1条
3 s' k3 @9 Q7 }7 d9 A: r2 d* |B.用户输入的数据需要经过适当的转义和过滤% I0 U' G! p, \
C.调用该函数将产生一个包含了其他记录条数的记录
  _6 E$ g5 C8 |$ N9 T, uD.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除  R( u. I, }: m  O) }0 t) J
E.查询语句中应该包含数据库名# e% M% g+ x" X/ w. Z- ^9 G

* b9 D: g# Z0 m" h7 J, D* `( f1 o* x/ f2 U+ ^3 O/ n
6.______语句能用来向已存在的表中添加新的记录。; D3 X" f" T% f

6 i* X$ B& _7 Q答案:____________' c% r0 I% Z3 v; q2 W# I7 c
/ u4 C0 _% D5 V+ X$ s

& S7 C6 X: u8 E& \7.以下哪个说法正确?
9 q$ Z. R* J' q! F
) f/ p! x& z% f7 v) B- g: ~6 yA.使用索引能加快插入数据的速度' S, m* G" t* T
B.良好的索引策略有助于防止跨站攻击4 G: C5 o- G5 `% a' S0 u
C.应当根据数据库的实际应用按理设计索引
; `; P% T5 e7 ^0 s  o+ D9 BD.删除一条记录将导致整个表的索引被破坏
/ K( V' A8 A+ SE.只有数字记录行需要索引
* ^$ v9 f+ Y& E4 M; [- d9 @* q2 H" U. \  \9 S( ]8 K

) x( q% t" V+ V7 k: D/ j% A, U0 m- R8.join能否被嵌套?
( w8 X$ h# ^/ [9 H& M- |& R' e& L6 E2 _! c
A.能7 k0 P! X. X# @
B.不能% z* _8 _% U! c1 x7 J& T; i$ G

) Z$ n0 e% M3 z2 a
8 c6 P1 ]3 @7 i. H; x9.考虑如下数据表和查询。如何添加索引能提高查询速度?
/ B  U5 k% ~. n4 ?! I  D+ l, v. N* R$ Y& D( u- j- U* h
CREATE TABLE MYTABLE (
3 r7 ^" H/ c. |0 hID INT,- D) W! G$ H4 w3 B0 w- L0 `. q; O
NAME VARCHAR (100),& f5 U& J- B% C; r2 u, W+ @7 p5 f
ADDRESS1 VARCHAR (100),2 V, O( \- f, l6 m
ADDRESS2 VARCHAR (100),/ g' H' `/ p* i9 r- _0 L
ZIPCODE VARCHAR (10),
, ?/ I" |# G9 dCITY VARCHAR (50),5 ^! y3 C" s5 `) y* R, [1 [
PROVINCE VARCHAR (2)4 n0 n) J# C8 U. S2 q
)  Q, x' ]- g; `
SELECT ID, VARCHAR1 Z# L/ X  J6 q6 c! }2 ]
FROM MYTABLE5 k% d9 k3 x' d/ f
WHERE ID BETWEEN 0 AND 100& ?8 F+ Z, W0 r$ m* ~* X
ORDER BY NAME, ZIPCODE
* \: l3 m% [7 n6 g) U6 t% L) C; c3 H
% p$ S6 d5 q# _; K& j" _" YA.给ID添加索引+ N) v/ L( o. U+ Y  Q2 _
B.给NAME和ADDRESS1添加索引
4 |9 t4 x8 {4 m( f* _7 UC.给ID添加索引,然后给NAME和ZIPCODE分别添加索引7 B0 p! [2 J/ G
D.给ZIPCODE和NAME添加索引9 a+ T7 j, g7 P1 k
E.给ZIPCODE添加全文检索
. s( s# ^$ O; }, a; a9 w$ I* i
0 B8 @( q" p- s, }8 X/ l! w
- ~1 R3 J/ a0 C# v) E  W& B10.执行以下SQL语句后将发生什么?2 o- A& I( j" R  t4 \5 j

2 f6 _* u8 W. m# HBEGIN TRANSACTION
- j; \9 b6 b2 R+ FDELETE FROM MYTABLE WHERE ID=14 j  @$ g! c; q5 @
DELETE FROM OTHERTABLE' M/ u' l) S, s1 k6 M# Z
ROLLBACK TRANSACTION
+ w# E0 ~8 N4 h5 D4 S5 x6 @
5 ]6 x: U2 s; h4 XA.OTHERTABLE中的内容将被删除
6 j  y  M& m. m" M# \" H8 Q2 hB.OTHERTABLE和MYTABLE中的内容都会被删除
: `& L& p* F6 K; D0 f4 r" X! w, eC.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
# q4 y& q1 I" XD.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
& x; x( n' c, b( ]$ O& NE.数据库没用变化6 A- |8 r8 ]* i" J$ D% {* C

; J5 ^9 I7 j4 w! k
1 C; C6 L$ P" f5 T# Q" ^11.DESC在这个查询中起什么作用?- u5 W: n1 s/ O9 M0 B' ^; a& t
8 N# @; R0 g( \& B& k
SELECT *: H& J; g" F& ^! O/ q
FROM MY_TABLE
& p' B6 A* p+ ~& @4 `, oWHERE ID > 0
+ p# e. J: S) v; b: Y& ~9 QORDER BY ID, NAME DESC' r8 Y) U8 @7 a7 H" S
, m/ E7 W$ G$ c* f# S' w0 `
A.返回的数据集倒序排列
8 {3 M+ Y* U4 m; {1 B' h0 sB.ID相同的记录按NAME升序排列
7 a( l. x+ `$ |- ?& [" L/ eC.ID相同的记录按NAME倒序排列
! D6 y" c( r& s* c2 b' I- @D.返回的记录先按NAME排序,再安ID排序* N$ W' l  g" e: z
E.结果集中包含对NAME字段的描述
. f1 C' n: {8 n% ]
7 `. i3 Y& K9 W+ j3 _% h0 o( \$ G  ?' d0 K! r% K
12.以下哪个不是SQL函数?6 I6 p/ R( ~" q; a: q; o3 N

' k( E3 s' s2 d% `' aA.AVG
/ c4 [% I5 Z- i4 F8 rB.SUM1 ~& C0 P7 r0 P& J/ c
C.MIN
& s8 f& ]1 n0 F% vD.MAX( k" `; t4 N& a+ Q' E
E.CURRENT_DATE()" S% k& r, p5 K& ~

0 d( J8 U* N! L" q1 a
1 F, Q* ]) ?- ~13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?+ ?8 e, B! D  v& Y5 J

, @, ?; P7 W* e8 m; V: cA.该字段必须有索引7 A: |2 e- d( |9 b
B.该字段必须包括在GROUP BY条件中/ m5 v% G+ ]" m; u" _6 }& m$ b  I
C.该字段必须包含一个累积值4 I8 [' V9 F& J& [% ~
D.该字段必须是主键
; |; w% c  d3 ZE.该字段必须不能包含NULL值8 M' C% S* _! L

& B' ^' s4 u( N, U
  a5 G/ f+ b1 F1 p% n1 `) V14.以下查询输出什么?
2 z) \5 d2 M, c* H0 E& H8 J% U6 y! N, K
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
3 c( w0 W7 ~" D7 y0 w$ C  J7 GON TABLE1.ID <> TABLE2.ID
; |6 _$ F: e, t& z. h' |, P3 d; S2 [- h6 i! e" ~
A.TABLE1和TABLE2不相同的记录0 E/ Z+ \/ O6 }
B.两个表中相同的记录
$ B* _) ]; u, C9 Z& {( DC.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数: l; e) c$ o) {
D.两表中不同记录的条数9 b2 J$ ]3 V- D; o: y  B
E.数字21 c& I7 W2 F  d3 r: Z2 p- ?

% |0 b% P' [5 p' F3 `4 V. _1 X1 j$ e
8 t! d  ]/ |! J) K15.______能保证一组SQL语句不受干扰的运行?# [3 y; A# n8 h0 R6 A, Z0 j* y+ `6 B

3 E' i) T, o% {2 C3 U. V0 e) h% B答案:____________! h3 J- u- J2 N. @3 m
2 |, E7 Y* `! {3 P3 [

) d( d2 C/ f1 N5 O; ~
' x0 I% G. k' ]! p答案速查/ r) ^0 w/ s' m' c. u; E
1:BC1 S! b3 W: R# }/ r8 }- F+ l( m1 ], `
2:WHERE! L% A* `1 b' V/ f4 v0 v  g
3:B% A. {# T/ }9 J) R; B
4:E) D  E- Y3 ?, l& I& n" c
5:BD! g: i+ k1 M3 D2 }
6:INSERT' w) p) @! X3 Q( |
7:C; \- L- a$ d* v% G" W3 H
8:A9 L7 q' ^  @: I! A, G! ~
9:C0 J/ E2 Q8 Y  X4 e
10:E- H' E% J& ]1 B; R, v: q
11:C# _! r# [$ M$ f! D- ^. v: s# y% c
12:E4 _' E$ h& x* l! \
13:BC3 W0 C2 o0 |" U6 z5 x
14:C
0 Q) N( L0 r' _, b* P& V1 @15:事务5 i6 Y% B$ P" w3 L
% k1 l; \8 J0 p+ r2 z2 D9 D

& s  M: X6 I* R  D0 F
7 F4 I* b1 z' Z# x- t- X$ C答案详解
5 A( V+ D% v: ]4 @+ J
1 U7 @) e' J- a$ ~- r9 W1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。6 j# t& o: H& L- v% ?

, N- B- v5 X  K7 w, B2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
! b) s. r: R. }: o: u& |: \8 e
2 x. A" t7 I, k  j+ Z9 m3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。
/ `2 ]) |3 T' y4 W4 {( Q4 p3 q- [
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
& Y, q5 |/ l6 i2 @1 |8 n9 a8 U8 A( k3 S# a  S) i
5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。* B* y0 D0 G) Q  Q5 O3 x
1 K+ a( i4 D: l
6.答案显然是INSERT。( V% M: R; b  W7 h* H2 |
9 m4 A/ C8 R0 W" s5 X
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。4 g' n: V* o6 ~  x
! a6 ~  E( W8 Q% `/ h, u
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。6 e, U; @9 M$ t
4 X! t4 I& S! I; k4 G
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。* H" ^, H9 R1 ]1 E: ?0 G/ h
5 y, ]5 F, A1 t5 I, t- }
10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
5 M/ W$ i' ~; r' y' O! s4 g" L# L, r% p2 t, F/ I; s
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。3 ?# n: M3 {3 D! B. F8 s

1 @7 ]& `8 w1 a) O12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。5 I5 V# |( _. v9 C4 O% {* u
7 k; |8 e; ~+ K2 V
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。1 g  }5 v4 [4 P! S

% T, J. O! i3 B2 j& a! r& X  d14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。! o0 L/ @$ k2 B! s
& V! h  X) l. p+ d% n
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

返回列表
【捌玖网络】已经运行: