获得本站免费赞助空间请点这里
返回列表 发帖

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。, @) x# j: c3 V2 Z: J- m$ k
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
; f1 f/ [7 ^7 x) d+ k4 s0 e/ m6 K本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。8 V/ F" c7 p+ c
5 a- N; t) `( Y$ q4 M3 Z

5 m; M& Z' o1 c  i. }% C: }( \问题& ?: p0 F# ]) m1 S* u6 c

) I1 d1 `: W. u% c3 {& Z1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)
9 i, e4 o) S  o5 }* }4 y# J' W' M3 f3 ?1 O3 x
SELECT * FROM MY_TABLE, Q" y, V* H& J+ Y. w
1 [1 X* X3 ?. J6 n* R
A.如果可能,用把查询转换成存储例程
+ v, Q" y* A+ f/ rB.如果程序允许,给查询指定返回记录的范围
  o# `0 I- d) V. p* IC.如果可能,添加where条件( K, A& h+ A) j% N. F
D.如果DBMS允许,把查询转换成视图; u$ t/ K0 @* x$ d' k( {( X5 J
E.如果DBMS允许,使用事先准备好的语句8 O# S; f  Q3 \) P! M" l1 b6 ~
- N1 u1 t6 ?- s$ \" ~
1 @8 F" ?% ^7 G# K# U
2.可以用添加______条件的方式对查询返回的数据集进行过滤?
, ]$ {( n: f% V: \' R# o" P+ I" i
, [& ]" t& ^# n" f5 Q  p答案:____________
6 T# I6 h, L; D9 A9 Q+ ~1 B; l0 v: B' d+ {5 L* d, _

! Z( S  q  n  t3.内关联(inner join)是用来做什么的?
" Y1 |7 @2 w2 t! T9 e# p, C! r( o$ j9 z! F1 U% \  x
A.把两个表通过相同字段关联入一张持久的表中& k2 p/ V, Y! j( A  ?4 G
B.创建基于两个表中相同相同行的结果集! O- Y3 d1 r; `* ~2 ^  \7 \$ g
C.创建基于一个表中的记录的数据集; ~; l. C. T9 R1 h, N/ [7 j% x$ ?
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集
* d- R  u  G4 V7 J4 R0 QE.以上都不对
" M/ H9 l, a. P. }- j4 q
, E: `& u5 E5 q5 a+ N; n4 g' ?7 w' K, R0 ]7 J6 ?% ]) s
4.以下哪个DBMS没有PHP扩展库?4 _6 ?7 e+ k# }7 L0 _" d/ P
- s7 l) f6 R, O, U( {
A.MySQL% b) @% O9 X8 T; p1 s
B.IBM DB/22 u1 j8 x9 K4 \3 }) X" g
C.PostgreSQL
+ c3 E* `6 t6 [9 |1 Q" ?! n$ j$ SD.Microsoft SQL Server* \8 Z* i) p  A
E.以上都不对6 H& L" [, O! V5 i2 Q+ k( S

+ F( W  J% x$ V7 E
5 s( h0 C3 `! Q4 H9 l5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)( H# ~' Q. M) N  D7 `
6 w0 R3 T' P( o# J
<?php
. D# \8 Y" |1 p  c+ }2 ^$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);$ V, H4 o  N, [  u6 j5 V
?>
0 S4 |! F2 t* v" s# V% p- V. y3 Y. ?  d0 C% ?
A.MYTABLE表中的记录超过1条
- E, v0 S8 G# j7 S. i! N4 WB.用户输入的数据需要经过适当的转义和过滤
, A5 N- N. m8 C! MC.调用该函数将产生一个包含了其他记录条数的记录
- a5 H! x. \' y0 h  oD.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除) c( b1 c4 f" G# ~1 F
E.查询语句中应该包含数据库名
& @; n3 r, v, [& B% A, H
2 j3 r5 H: m, _/ a. k$ q$ x. N5 H$ d- R
6.______语句能用来向已存在的表中添加新的记录。' ?9 U* W- D" g4 J
& m" B  D9 H1 c' y
答案:____________
7 D: r, R( X7 E, O/ {- ~5 y3 [
& R' m4 f2 a' \0 R& c% l2 z: |5 J& l7 E! q% k, \2 N
7.以下哪个说法正确?
5 @8 ]1 F0 m0 d, X3 Y1 d$ a3 r' ^. w$ L2 B5 \; `" T
A.使用索引能加快插入数据的速度
# Y& ]' M/ a5 X! Y6 kB.良好的索引策略有助于防止跨站攻击; N1 _4 g- k8 E4 L3 `) O3 e
C.应当根据数据库的实际应用按理设计索引
2 r  c  \/ K% O2 cD.删除一条记录将导致整个表的索引被破坏
1 y4 q$ p- K4 f) mE.只有数字记录行需要索引
4 V3 O( n0 e- n; r0 e
, }5 Z9 O# c1 m* M/ |6 c
$ T0 r9 K+ i+ }1 ]; W& H8.join能否被嵌套?
# R9 ^: m& T# R  ]( u8 t* U, v  Z) c$ G! w+ Y  ?
A.能) D% g, K# Z" D7 p; K
B.不能
# f3 n& _* N2 x* y6 ]0 T3 @" n0 u$ P* O8 H0 E

* w9 b2 h3 F4 h; y2 ]( ]: b9.考虑如下数据表和查询。如何添加索引能提高查询速度?
/ Y7 l3 ~$ q  E2 o8 |  p; Y
/ T( N! F$ y, z: O% N8 d/ GCREATE TABLE MYTABLE (
6 b6 a/ E4 k" I9 o( kID INT,
$ }, }; W: k/ f& f% B, E5 jNAME VARCHAR (100),4 j! j6 A8 c, X1 l! Q+ k9 t
ADDRESS1 VARCHAR (100),2 a9 i- R% z3 V: {, m5 ]9 U! G5 Y
ADDRESS2 VARCHAR (100),+ f3 h6 e# g2 j0 Q* m
ZIPCODE VARCHAR (10),
$ d4 P2 j+ E  {0 P% jCITY VARCHAR (50),
+ O- O2 ~3 Z: S, m* s7 HPROVINCE VARCHAR (2)
. `+ W/ i8 O$ {7 z! V2 b0 I4 Y; C' E)& O$ a+ b* n7 o9 l0 r- x& V* w
SELECT ID, VARCHAR
9 J, Y" W, l+ ]FROM MYTABLE
, y, p6 G  T6 A6 B2 W3 x/ L, hWHERE ID BETWEEN 0 AND 100
( H4 j! A- ]9 F& X9 pORDER BY NAME, ZIPCODE
9 {7 p# z% _5 \4 j' _2 C: N1 j
. P+ Y* j& ^' S2 b( j9 JA.给ID添加索引
! }: p1 D9 d% xB.给NAME和ADDRESS1添加索引# \3 _0 r# L/ m
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
2 c# n& R/ @/ j; d1 X4 eD.给ZIPCODE和NAME添加索引
* K! L6 L, t% I( C& v# D0 fE.给ZIPCODE添加全文检索8 y5 H# e+ p9 A4 P& b
0 S! ?7 ~) I% T6 r' q
7 P* M: A2 z) c& }6 O' E
10.执行以下SQL语句后将发生什么?6 u4 w6 |: u1 ]; C- a

* G/ ?9 a2 x* `0 J3 [+ WBEGIN TRANSACTION) W- S$ ~$ b% u- F0 |
DELETE FROM MYTABLE WHERE ID=17 X; G; D1 I7 @) _  g
DELETE FROM OTHERTABLE
' H; y$ R0 z3 x" L' [. h& yROLLBACK TRANSACTION
# Z5 x! E6 W4 i2 T+ A3 d. E6 Z- L$ ]" v( y8 W. K1 t' J) g- T' R
A.OTHERTABLE中的内容将被删除9 O+ J5 T! J/ v: r4 r: B
B.OTHERTABLE和MYTABLE中的内容都会被删除7 p3 X7 ?! Q! Y, _; |
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
( {  ]6 e1 C* g* {* b3 O( J" |D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
8 L. p$ m( C! l& H5 u+ a5 OE.数据库没用变化) p2 N& z1 C+ X! i% L
. w8 S" G! r9 ]4 D( ~* ?

5 b& e3 X/ }) w" }0 [: n! Z$ S11.DESC在这个查询中起什么作用?
' O" C* v4 K0 k$ j5 f* R# a: K2 F
SELECT *
3 |; `6 ^" \4 Z, EFROM MY_TABLE
- Y/ @) j) L! C4 S3 R+ _WHERE ID > 0
" c5 ~6 S: z" f# i2 rORDER BY ID, NAME DESC. b' F+ Z8 t# p& ]7 E# K" T

  r) _& Y# e) j+ Q/ ?: VA.返回的数据集倒序排列
7 \6 R6 N8 K! Z+ X8 }5 _3 g4 YB.ID相同的记录按NAME升序排列
: C" ~; U3 e- X& yC.ID相同的记录按NAME倒序排列
% F& T4 l# V) m6 v1 C# {7 ~) u) gD.返回的记录先按NAME排序,再安ID排序
, P4 @) r# v& l8 q  ^  z3 UE.结果集中包含对NAME字段的描述4 y' q" U$ n/ C) ~) {* @  K
! ~$ O! U# p4 R% X  e
# f7 K# j  ~1 G# C6 W% I
12.以下哪个不是SQL函数?6 m  @$ ]' C; N* F5 r' E

: ^# X+ c$ t& R. O( ^7 F2 JA.AVG& r: b* r: z& r5 u
B.SUM
% T% G+ R1 C& ^$ P4 }6 I% `2 u" d  P1 _C.MIN2 V, c& G7 \5 n; |$ E9 y' f
D.MAX
$ V1 l" o4 G% Y1 R+ l$ bE.CURRENT_DATE()* J6 Y' |+ D, m; ]
6 [: t3 Z' \. ]
. _6 N' s" Q* J3 L5 N
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?8 m3 w, [5 Q7 x0 g3 {; w1 @

+ l  r" |: e0 D! n9 L) S6 l/ jA.该字段必须有索引7 D+ C. h1 P! x! T3 Q( q2 K
B.该字段必须包括在GROUP BY条件中8 E! a& M% K* p" P
C.该字段必须包含一个累积值  e* q4 q$ [5 X4 m- X  Z
D.该字段必须是主键
1 h+ P+ X4 c7 E8 u& t  x( YE.该字段必须不能包含NULL值
" O: c# m* R: o9 `' s
1 g0 ^# Y3 t+ }/ x  ]2 {8 r6 c: m* L8 R& G( z. q
14.以下查询输出什么?
; M- i2 M. k3 B4 E
$ p! ]: q; v! j- U5 }SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE25 f, O# ^* V5 t# `& w& f
ON TABLE1.ID <> TABLE2.ID0 \# D0 z- a5 f4 b. q

+ k0 F: }! V/ k+ _6 [. t" T  m6 cA.TABLE1和TABLE2不相同的记录: O/ O' U0 r. K7 v
B.两个表中相同的记录3 G7 u8 ^, ~5 N  a% ?4 w
C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数; K: m& u  q4 i
D.两表中不同记录的条数
8 }( e$ z, k; U, _' J8 M$ P3 q3 hE.数字2; w& Y8 I4 _% g4 t8 q& y3 M: [) l8 }

! u. R" F8 H4 K! X% N! Z
* }( I8 o$ }/ a) N8 D15.______能保证一组SQL语句不受干扰的运行?
( R6 S9 K* W5 e! `& _
/ Y* {, D$ u( M: q/ W- ~9 G答案:____________
! H+ J$ r( f( d0 r% _9 W& P
9 h/ Q" f6 o1 p& c% {1 u! r4 H6 c! a, g0 t# P% z" R" W2 R
1 u5 L* Y4 }5 T9 a% m- t' _: M
答案速查
4 e+ }4 r3 i& \& S' v3 a' J1:BC3 b) \+ \) q2 J8 @
2:WHERE
- s% N  F+ O* V- \3:B
! I+ |# r6 g, T$ ^& X2 _' K+ Q4:E
2 a# y2 @& V- n' V% [! l' W$ a! F5:BD
  n0 |) n. ^: z1 ^1 p) V1 N6:INSERT& Z. s3 @( G0 u$ o9 y, L! o
7:C
& _6 S+ H: J* h0 f2 k3 o  J6 d8:A' V* t& ?# R- N% V
9:C
) p! D& K3 [5 s7 }) l1 z10:E
7 ^2 @: I" q5 c8 O0 e3 ?) U11:C
' e1 [/ j( x& S5 y( T* P12:E
2 Z5 h; ]7 X1 j+ ~- Q: i) _13:BC
' c! p" ~' J/ ~8 p$ f; y14:C
( b  Y7 a" q" S+ O1 W$ n" G15:事务
+ y6 {! }& N- h: |
. r8 w) u# [% f! D' e. Z: y$ c, Y! p* k( X4 ]7 h9 Q$ a0 _

& |5 z, j2 ]4 p答案详解8 j: V$ s4 h* W: ?  I. S
6 w/ r3 U) m% l9 [7 l" x8 U9 H, Z
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。5 w- O8 g) P( V& x* Y
% F" i* K+ y( Y& X" {6 H" I5 d
2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
& l+ r* u. W1 V8 C9 ?! j4 v" l0 }
4 I6 p" s/ g/ b, H3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。
! y1 b$ a6 G( c0 f  v2 B$ ~5 L& a5 B- T: n+ W7 {
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。& B- B; W' Q+ y* p

$ H! o3 Z2 H8 R) t1 A5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。
. r+ B4 L7 A) t9 Y* w* c& |
; W% m* P) H$ H6.答案显然是INSERT。$ R1 o  h/ c$ y
  ]' o9 C& P2 _+ t
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
9 p8 W/ {2 N% k8 G+ ]  G' U% z7 Y3 @8 f- P3 G, V* s/ w1 Z. w
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
) s, t* T2 O" T5 T+ s
* u4 Q; P. J4 j0 U2 o/ p" C9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。& B0 `# |& A' g5 F

( V" @0 Q3 ~: M10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
7 O0 U* F, z; @% G8 h6 Z- f3 H* z
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
; F+ `, a9 L4 J
8 m7 I! G& O/ Y/ G( }12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。8 F  ]: t5 M  A: Q  Z- [; Y+ X

* ]/ h# ?/ A* y% N13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
9 Y5 J' n# ]% s9 q7 [
$ z1 ]( r$ _5 S' ]; L; s14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。* ~  a6 x. Y: }
, @/ F0 w/ x$ H1 t; G0 s
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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