Board logo

标题: [Zend权威认证试题讲解]第九章 - PHP与数据库 [打印本页]

作者: admin    时间: 2008-4-17 14:44     标题: [Zend权威认证试题讲解]第九章 - PHP与数据库

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。9 V8 p' O' S; K
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
" c7 W5 n4 v) v9 b, J本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
, w% }/ S( E) h! R
& t" |2 K3 s0 \6 ~; Y& o) P0 |. j/ M: A3 {& T) [
问题! N7 j+ y" k9 c6 I& Z7 Y' d$ v: F

: |! s, S7 V& g2 O/ u( {! E' y) ]1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)* e& ^8 g8 s7 P# K$ l

) h' E& M! f5 W/ ^- C- rSELECT * FROM MY_TABLE6 M6 Y' z; e* Q. x  D
) V$ c) k( [0 i! V7 G5 L
A.如果可能,用把查询转换成存储例程
; b+ A8 w% T4 `' qB.如果程序允许,给查询指定返回记录的范围- B0 ?% o4 F1 z6 G
C.如果可能,添加where条件
) j1 V* ]7 c8 k, h2 J/ _D.如果DBMS允许,把查询转换成视图) S' N  r, R7 n6 h: E, A
E.如果DBMS允许,使用事先准备好的语句  m: o. m1 [8 }% \
1 \; i8 L% [9 V) U. M% `  B
4 Z! |. J6 d5 l- y3 W/ P
2.可以用添加______条件的方式对查询返回的数据集进行过滤?
5 U* l& B" i  ?5 p2 o0 N& z3 H7 m% Y: s
答案:____________
3 S& w3 U' ]% f+ t  v: w1 C. a* U( M: F9 _9 w- H- ?

. [' ^. i5 J4 w. S3.内关联(inner join)是用来做什么的?: b6 k: T3 M$ ^* p- a

7 f  Q8 k7 C8 E/ S- uA.把两个表通过相同字段关联入一张持久的表中
' R/ B) `! A; `) j  J' v6 EB.创建基于两个表中相同相同行的结果集) }) v) N, n0 y8 W0 [
C.创建基于一个表中的记录的数据集6 e" Y' |# c, w9 V
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集1 W! J+ e6 W- ?8 E5 A' ~
E.以上都不对
! X5 t8 c6 G+ Z) l$ ?: g# b8 e2 }! O; `" [4 C- h

' F3 u: s$ D6 g( _4.以下哪个DBMS没有PHP扩展库?
, a: f4 ]0 r( X% B% b9 B- L7 X, y$ @& s& V# p" |) x
A.MySQL
& `7 u, {! y% S: _5 h0 U( YB.IBM DB/25 e2 ]/ I2 X2 ^5 p" x
C.PostgreSQL, a, o- r5 z" n3 j3 E8 m* [. L
D.Microsoft SQL Server5 [3 {1 a8 n% g, l
E.以上都不对
( _7 H/ V* q- e: H, _% {& z9 {7 d$ c  e7 P" }
3 M6 N9 u4 \' R! a- A+ ~- B
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
( t( E% q5 n' [. A: y# ~. D  p2 S; ]; U% n$ |7 ?$ A
<?php: ~/ {; D* Q, v9 N0 o
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
/ q" j* ~6 \( v7 P8 h8 G- v( v?>
9 A# I4 k) B, o2 ~& h
- L& D+ ]3 ]3 f5 {# {A.MYTABLE表中的记录超过1条
! P* |7 N  \2 pB.用户输入的数据需要经过适当的转义和过滤: d% q) ~$ |% n( r6 H, n
C.调用该函数将产生一个包含了其他记录条数的记录$ Z) s0 W7 l2 e8 C0 }- F7 C
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除( Q$ a/ }( ^6 O  |5 G7 l/ l5 R+ a
E.查询语句中应该包含数据库名8 Y4 J, u0 ^9 x+ {4 [6 \& @

  w# K% ^! q2 z5 A5 L5 B! B, B4 W6 ^1 i0 g
6.______语句能用来向已存在的表中添加新的记录。" N$ D5 l/ \3 S. W) J/ Y
: ]5 r/ V; N! z! ?- k( G* H$ k& A2 R: q' q
答案:____________
4 _9 `8 k( b* i$ \3 X( ~# C  d2 H, {: L0 p$ f6 Z5 \2 ~) q7 h) c

+ M3 h" x2 V- d1 R) M7.以下哪个说法正确?1 ?4 ]3 O  Z* y5 D( b
7 D/ a: s! a! N- i. J
A.使用索引能加快插入数据的速度
) P9 q( G8 y4 X0 e$ v3 UB.良好的索引策略有助于防止跨站攻击
# B" t6 y9 x' x, l- v9 FC.应当根据数据库的实际应用按理设计索引
) q) l. p" A* \; M$ o/ kD.删除一条记录将导致整个表的索引被破坏7 {2 n* b3 Y; I8 P; r7 _
E.只有数字记录行需要索引
, I2 P7 t; L7 t! `# w5 k
( a# g3 S* {  ^& e+ v0 @, J! V
% H. E4 o3 R, P0 |; E! O- M  }( Y8.join能否被嵌套?
0 N, t5 N6 l* A9 D
7 _  s  i  T2 O1 ]' AA.能3 s1 w% U7 J' Q  f7 |
B.不能
0 ]0 u) L6 L- r# c" g
) J% N# J; `- B% a* x
" {$ J7 S$ A7 U. I8 |$ e( ^* p+ S9.考虑如下数据表和查询。如何添加索引能提高查询速度?) \1 M% a  Y# ]4 `, p

4 l4 J, y1 ]  s7 e  Z- ~* BCREATE TABLE MYTABLE (
& Z7 T2 f2 l2 W: u' s$ e/ SID INT,: R: Q1 d1 s8 P' b
NAME VARCHAR (100),6 T( |- V" |- [- W! Q' n  T
ADDRESS1 VARCHAR (100),/ Q% P6 O5 [- w
ADDRESS2 VARCHAR (100),
6 T$ P6 y' p9 @3 xZIPCODE VARCHAR (10),
& j' t* T- H+ hCITY VARCHAR (50),
, c3 V6 @# B5 F! fPROVINCE VARCHAR (2)
* D' l& |& r/ S' h8 g4 N- h/ T), k! t; w$ d( D, n( l
SELECT ID, VARCHAR1 L4 ?- K  q2 h* W: t
FROM MYTABLE; g4 H. z5 n' n( C* f* b% N$ m5 {
WHERE ID BETWEEN 0 AND 100
6 r# w$ ]7 h# Q6 SORDER BY NAME, ZIPCODE6 I$ _  g3 p+ r8 i$ d" j

; Q7 X# p; q; {A.给ID添加索引
' \! ~) y8 f# k# tB.给NAME和ADDRESS1添加索引
- k) }  C; j  O1 D- r, p- p4 D" sC.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
2 W& h3 s& E& |5 |( R/ WD.给ZIPCODE和NAME添加索引
8 k6 U' P# P8 k& Y9 H" R; |+ tE.给ZIPCODE添加全文检索; t& j5 i! G; t
  u9 v7 s/ Z6 G5 T
% t6 G" O/ N9 A" m
10.执行以下SQL语句后将发生什么?& l* k$ @' j5 m% H9 G$ ~

! w/ @* L9 m9 tBEGIN TRANSACTION
  |5 N  W- ?* N, _; H% H  DDELETE FROM MYTABLE WHERE ID=1
" b/ B# F( y; S; o! U  CDELETE FROM OTHERTABLE
+ `9 ]2 y$ }9 i1 W7 D- x* RROLLBACK TRANSACTION% q1 {5 i1 A0 ~& H
$ m6 @& K& m+ u* M4 I
A.OTHERTABLE中的内容将被删除, ?9 d; L1 ~  z7 Z) W4 ^! E
B.OTHERTABLE和MYTABLE中的内容都会被删除8 H3 N, F& O4 }: l2 Y
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除( z% A1 U5 J6 @" ^! ~& g7 ?% S
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
- _  g- F6 I. ?$ @' j3 _E.数据库没用变化
/ W) _( p' v% ^/ F) s1 N6 E3 N0 h# w* W+ e4 r* @% n

  y4 |+ L% ?) H0 l& w6 O2 F11.DESC在这个查询中起什么作用?9 y5 h$ ?! ?3 ]
9 U" e5 ]( I9 k, f/ i
SELECT *7 e5 `" J/ S+ V' k, }1 w( s  ^5 t
FROM MY_TABLE
; x$ Q* p2 c, a7 Q+ e0 H- e+ EWHERE ID > 0% Q) Y( M/ q, p: A& \  _$ F9 C
ORDER BY ID, NAME DESC% L& U0 @3 B* n0 F" O" r' O( J

1 D7 ?# p$ h5 S+ E& Z  J  S1 ?A.返回的数据集倒序排列/ `/ ]& \/ B& i8 w
B.ID相同的记录按NAME升序排列6 }) R1 d7 K# B" c! b) e7 }0 q1 `
C.ID相同的记录按NAME倒序排列
1 Q) ~- S- k8 f- a4 @6 j9 L* `D.返回的记录先按NAME排序,再安ID排序
/ y4 G' s1 ?, P3 @3 gE.结果集中包含对NAME字段的描述) q# Q8 O: I: v9 S
! K  z7 W0 W# X; J/ D, ~

# R& D$ ]1 {; o- I; e9 {12.以下哪个不是SQL函数?6 x- N/ X( J* T4 s; ?
1 Y" U% ]  p* Q/ p
A.AVG9 c$ Y, \  b$ J& s; f  \
B.SUM  a* _9 u# Z9 U4 c8 `
C.MIN9 `. v# y- x: T, O2 f
D.MAX
- H/ K, L8 n- c6 Z7 D, UE.CURRENT_DATE()
% Z/ Q9 P5 i% d9 ?
! g) J( c" r! q% ~2 E/ g
* B' a+ U# B' N. ?13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
: x4 R% [6 X* @. o$ ]9 }3 T+ d4 L5 t0 Q( i4 }/ D* X& F2 d
A.该字段必须有索引( e* R3 _- E# ^: B7 y0 s
B.该字段必须包括在GROUP BY条件中
/ e0 Z+ O# ?% rC.该字段必须包含一个累积值
! C6 e. r1 ]7 D. V. a: GD.该字段必须是主键1 r* t* |; Y& N  l5 [
E.该字段必须不能包含NULL值/ t( _& \/ x  @% P  d* G
  d2 r- y+ a* x8 z% x

# r5 p' B' r2 n+ D# ], G14.以下查询输出什么?# {1 Q2 D7 F% u2 j8 D
5 y: M! \8 O( M0 Y" G! C4 I
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE28 k  B. Q* W0 H5 w$ J2 I
ON TABLE1.ID <> TABLE2.ID
2 t# q6 o: R! U7 P" ]: P2 G3 |
6 k* x# O* @' e! |' z- tA.TABLE1和TABLE2不相同的记录( n( J' v, A7 X* O/ X
B.两个表中相同的记录
. W* Z- z2 A' w' |! n/ zC.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数! T3 E3 _$ Z4 Z" h" L
D.两表中不同记录的条数* e  d* |0 A: l/ k
E.数字2
8 A, W6 p6 @3 V2 B( z% E: e! H# a; [% B( ~

# r/ H6 K+ K, {' Q( }15.______能保证一组SQL语句不受干扰的运行?
) y9 d* B7 U# F; U
$ z& J; _9 [2 b6 h9 d; A0 _/ c8 K答案:____________
* Z, ], R6 g1 }5 T, J. E
, O5 X5 o1 w1 e  E4 F* J% s, I% t" a
$ K, s2 t* B  m$ h; y! B2 {: L) ^1 T+ m: n2 d
答案速查4 z8 ~% d) ]+ \0 X1 w9 y1 v; }
1:BC
; J3 {& h+ @, o' b/ ~2:WHERE5 X* Q+ ~! E+ O
3:B
3 N. @! L' A8 ^5 ?4:E
  s$ d8 U9 x9 ^; a5:BD
, Y; l! o0 R# U$ s, r6:INSERT
+ E" J/ f) ^1 ^% g' `7:C: y5 G& G1 |# v( X& k
8:A
9 m8 B7 g% j% U9:C5 G5 ~8 Q5 R' I0 y3 V
10:E" s" W7 E. L/ L& h7 R; b; C/ N
11:C& Q1 N2 ]2 s& C/ j3 @  {: Y
12:E
: s! s; F8 }" \7 j1 u- y* Z13:BC% W# Z' B4 G/ R6 Z: r- n% O/ c
14:C
- E4 u0 t  R7 F0 x/ g15:事务7 H2 N4 }% N9 X+ V: f0 C9 P
1 w' t' n8 j8 q, H4 x, R9 F4 Q$ A# @- y
6 ?1 K7 N: K* @3 {: R
/ g% h; t9 _- }+ R" w# L( w
答案详解# l" o0 M: q6 |7 y+ s$ i, G6 g9 a* n0 W
5 F0 B  S' v% e# @' N
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。$ o0 ]7 _/ J+ P/ l

3 l' G' B) S2 X9 m' G2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
$ T; j8 A: H( w# Y3 B* \$ g' k- m9 a0 R2 O! B
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。
6 y9 v& K+ d  Z# ?+ |
$ j2 O2 u9 T  y4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。( i: R% h( |  h! ~" e( y/ R

4 p8 ^2 O( j: X5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。
5 D3 d; c% i0 }9 G4 O& M1 W
: B: Y: V5 P( |  v" e- V2 y6.答案显然是INSERT。. s1 U3 V$ e; r# g& d/ o

" o# U1 m" W3 |7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。0 S# _# X: W' w' z; W+ \

# m: I4 a- b4 C1 G1 Q2 \8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。$ I" H  S( N0 X6 t) K% ^

2 T/ h0 O/ n: W/ M: L( Z1 n9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
  R4 w$ Z% o  x9 g' F" f2 k
' J0 ^3 v; [9 c1 \& [4 u; n10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。# Z# }  t7 \2 F/ @6 r% X" o
2 W! P  b1 S/ v
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。0 V# Q% a  n5 j, g6 z

: [$ s5 }' P; }( A12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
) f7 q- A0 @- r4 f: a/ c! Y$ u, s3 v" G5 B5 l- R% m5 \
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
5 i: S7 ]' h, |; y$ J7 u% p+ |& I) |8 X/ C+ b" G
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。4 g5 W1 r0 ?9 H* e5 \9 k
- V1 k& [, a& r9 j
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。




欢迎光临 捌玖网络工作室 (http://www.89w.org/) Powered by Discuz! 7.2