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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
/ s+ b3 Z  s# b6 yPHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
& v- z+ C* L4 c. p) [本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。: h5 d7 H+ O9 r  I

; h; j: |, N7 n) q. O
" w4 C+ O4 h( H% {问题6 X2 ]7 Z5 T# N" l
1 t1 H: t' g, i4 |$ n! N& L
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)
8 Q+ G. s5 E7 x) ]2 j1 Q1 I& B( m% }+ J
SELECT * FROM MY_TABLE* D0 t6 i5 p/ [7 p% [6 M: |

$ l3 F# c4 W7 h  J- YA.如果可能,用把查询转换成存储例程
  U2 Y8 U3 C: J/ `. @" zB.如果程序允许,给查询指定返回记录的范围
; _0 N+ a; w8 u7 C# l, D3 B/ oC.如果可能,添加where条件
+ |5 X3 A4 I; T9 t9 AD.如果DBMS允许,把查询转换成视图- g. K# E. k; `% x( G, ?- A# X% h
E.如果DBMS允许,使用事先准备好的语句
+ R$ }7 p) _' o% P9 m. w& S% ~8 `  i9 K* H/ T8 M
( ~* x) l( I( u2 ~! d
2.可以用添加______条件的方式对查询返回的数据集进行过滤?
7 n6 `9 `* o. i1 ~% Q9 n" y. x- g- Y- `7 {2 a5 Y' q0 r
答案:____________
6 z1 ]( _9 }3 `- _6 U# k
" C6 \. v) z: N& ]: l. `9 T" O( j2 i: y8 T( [( H6 F
3.内关联(inner join)是用来做什么的?
! m2 \) z6 J; f7 o% I$ {, Z: B, I, w" S4 {$ h+ q
A.把两个表通过相同字段关联入一张持久的表中
! Q4 y+ z2 A& j5 ^$ Y4 ]/ pB.创建基于两个表中相同相同行的结果集3 `5 T5 {. o0 x* W: c. M
C.创建基于一个表中的记录的数据集; h! o4 d! |, s9 \7 W
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集% m( N9 o' T6 k8 v% N
E.以上都不对
- X2 _4 o1 |" l3 }% q# X8 J% A
3 Q5 K2 q2 w/ U$ F# U7 f( d; N3 T& M5 M/ }) e& z6 g" W! c# M
4.以下哪个DBMS没有PHP扩展库?. N7 i7 M1 O, h1 O, P& N
: O# y0 k! y* y1 A" M
A.MySQL/ y8 s: {4 H  v) W
B.IBM DB/2& t) n+ M7 U, I* @0 o4 b1 q& f
C.PostgreSQL" ~/ O- w# C8 d% y
D.Microsoft SQL Server. ]+ [+ g: _' ~/ r! z  }
E.以上都不对5 ]! D) Y2 p  U

- A4 C1 Z+ }$ O$ \; Y0 V
; o/ d$ d, Z+ ~3 ?0 |: N2 O1 K5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)- r0 u- O" u+ r. q$ p& i2 A

$ J# ^/ \6 j5 p1 d% ?<?php& r; h( \& K4 _' Z( k; y+ T
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);+ I# f& o* \" m) A# T
?>
2 w% b! Y% x5 u% L1 N% ]
' h/ y- Z- I* @9 b5 yA.MYTABLE表中的记录超过1条4 c& k" h. \6 m' |& A, ^9 H# ^: T
B.用户输入的数据需要经过适当的转义和过滤" |' Z1 g, b: q' x* s4 v' J
C.调用该函数将产生一个包含了其他记录条数的记录
, ^( M: ~7 x% k9 c. ~2 O( y& {D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
( o1 M1 n( B# @E.查询语句中应该包含数据库名
# _& ]/ x$ X; O# L) Y5 m
: W: ?& N" b! Q2 B$ K# c8 Q# P  |
6 i$ M2 S8 E, k6.______语句能用来向已存在的表中添加新的记录。2 F0 S  i* S8 Y7 B5 a
) F7 l2 U1 l7 L( S
答案:____________
: \7 e7 I3 o1 W( P) L' \* ?/ ^- H6 b; h; a' s8 X/ C

7 c2 _; f( P; y# ]3 K7.以下哪个说法正确?5 Y& X5 s0 r+ v
: X: k- F0 {9 w) U  W6 K
A.使用索引能加快插入数据的速度
  t* `* t" |; ~6 ~; yB.良好的索引策略有助于防止跨站攻击9 p! w9 L% i% s9 h# C
C.应当根据数据库的实际应用按理设计索引0 S; \0 Z/ |* |
D.删除一条记录将导致整个表的索引被破坏( p( r+ C6 O- ]6 G
E.只有数字记录行需要索引" K! b& h/ `- U8 W
' B0 o& P+ ?' G2 z
" ]+ [4 f8 W. n0 n: r# e: \
8.join能否被嵌套?1 `( o+ c8 ]* q& n; P
" f' H, I% z- f( e9 C
A.能- V  D- s4 d! W( y- }
B.不能; x, x& @7 x3 ^6 o! n. j

0 @/ ^: r# E8 Y& Z6 t& A8 \) G! f6 j' B9 x
9.考虑如下数据表和查询。如何添加索引能提高查询速度?
/ @) L8 A$ D  ^8 H9 G7 u0 B4 l9 r* |- G( D% E! ?0 v7 X4 Y
CREATE TABLE MYTABLE (
9 ?) x! u4 v/ M! J4 ?ID INT,
% V5 \- d2 n7 Z2 UNAME VARCHAR (100),
8 r! ^! O; f  h. E  r  }; a7 X  [ADDRESS1 VARCHAR (100),  n( `* l4 m- j4 ^! l
ADDRESS2 VARCHAR (100),
9 K' l* a& {, m# WZIPCODE VARCHAR (10),
& _  J* K, u% F2 _CITY VARCHAR (50),
, c) P; h0 M& R/ u/ A) |! IPROVINCE VARCHAR (2)
; a" V2 H3 P! N! J)
* m0 M2 G, L( l1 o& e- oSELECT ID, VARCHAR" S% l' C5 r$ p2 f9 X' v  k: f9 N
FROM MYTABLE1 c' ]  }- C: M6 W( F+ ?
WHERE ID BETWEEN 0 AND 100
2 X* R8 T& I% W2 F+ @ORDER BY NAME, ZIPCODE  Z: C" C( W8 W  G# B# I

1 _8 @4 L5 G$ V! qA.给ID添加索引
' ~6 _+ q4 O& _% ?B.给NAME和ADDRESS1添加索引
$ B1 n- H: U2 y, f" yC.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
, }1 N. K- m4 ~# T9 X# A* b! ?D.给ZIPCODE和NAME添加索引* K. }: V( ^3 j- f8 }
E.给ZIPCODE添加全文检索
/ Y  q4 D) t0 j& P# r; k
- i% o) O: M7 f* C9 r: ~+ P) _# i! P
1 n2 m8 v/ Z* a: y% ^3 ^+ c10.执行以下SQL语句后将发生什么?8 R' [8 Z. f! x- A
: e( ]" t, A. Z, f2 t. g
BEGIN TRANSACTION
# i; N& V2 r8 @. U! C" GDELETE FROM MYTABLE WHERE ID=1
+ Y: J! V& n  t+ yDELETE FROM OTHERTABLE$ [3 q7 l6 S. Z1 u  S/ J# D' S, n* l4 W
ROLLBACK TRANSACTION7 y/ k$ q4 \( c( I7 I
; o  s  {3 F8 [% P
A.OTHERTABLE中的内容将被删除$ l) L: x/ e3 o. L
B.OTHERTABLE和MYTABLE中的内容都会被删除# ~* L! R' J% w  Z# [5 @: t
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
" [6 Y9 n# ~( y+ s6 n1 D" @, @D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化. e8 g9 U+ k) @1 Y* I7 ]/ m
E.数据库没用变化- C4 i. V8 ^# V0 [1 K7 }3 |

0 F: U2 I+ [$ X* K5 q) l  W* x9 M8 w# l2 h4 P: P0 \# P0 V  b/ e* n
11.DESC在这个查询中起什么作用?
7 @+ _5 {/ R# N/ h
/ \6 D% A: Z% d# }1 w, ]6 |( g* gSELECT *
" v. u4 T  A) W2 mFROM MY_TABLE
1 `4 ~8 R- ]2 ^; d' P& CWHERE ID > 0% C+ Y1 `& b8 Q# O* `8 d. ^
ORDER BY ID, NAME DESC. ~- J) @. d; ^" o+ g5 _
! j6 G& ]3 i/ I' @# K9 z& T( A
A.返回的数据集倒序排列. U5 f* U! w( ?) e! J
B.ID相同的记录按NAME升序排列
& k, m7 k& [7 c) ^C.ID相同的记录按NAME倒序排列% P* R. h4 w# b" X7 ^
D.返回的记录先按NAME排序,再安ID排序
4 q$ x9 w4 w" C% G3 g9 ZE.结果集中包含对NAME字段的描述1 V* Y+ c6 E6 U) G

' I. H$ x: _, N( p0 T
4 U* E" x0 X" s12.以下哪个不是SQL函数?
, v# T3 k: o( W4 h1 S8 |6 k# i- ?2 s  G/ M' h9 F- e
A.AVG
1 u$ N- @2 n+ k' `B.SUM
2 S6 ]9 w% k+ [/ c  [$ x* BC.MIN% z5 q5 s3 H* T5 K4 T
D.MAX
1 |5 q9 t) K/ _1 aE.CURRENT_DATE()
% |, T4 }3 v+ G# m; I: i+ P. G  z! f  j* \+ y

" ~: Q+ V8 s+ y4 {13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?( ]! ^, e, U9 @+ W

8 N- v: W' X( T7 n" }A.该字段必须有索引4 z8 K2 ~0 A9 P/ u: B
B.该字段必须包括在GROUP BY条件中% d2 _' B' M+ k9 t
C.该字段必须包含一个累积值
2 V. u3 X% q7 P0 N! r1 g* b% aD.该字段必须是主键6 \" S& u7 ~) _$ i% W3 i
E.该字段必须不能包含NULL值
! J; V7 |" y, S, c2 S- S
4 V& q+ Y6 C! `. @0 ]! n5 y: _4 \. g7 _0 ^9 ], y# D) d
14.以下查询输出什么?
2 q! c* O* }+ q* L1 j
) m+ l0 ?$ p$ Q* HSELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
: `( [4 _$ r: h; \; M% K( \ON TABLE1.ID <> TABLE2.ID1 t: S2 j- j) ~9 j
. ^! C5 Y6 d& \! `, C  a
A.TABLE1和TABLE2不相同的记录
/ d+ C# w) P  h  C6 B* Z7 D2 C6 BB.两个表中相同的记录
+ G' A6 `5 ^6 P5 s6 l, f  PC.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数: \+ [- w" ~1 k3 }/ D3 i# U
D.两表中不同记录的条数
% f" [7 P1 s. N$ w2 L/ EE.数字2+ ^7 H$ o1 r% M+ S

' U  `' c8 ]5 p; v. k" t2 h, B7 p% f
: F* m5 e* R+ z9 y1 P5 g15.______能保证一组SQL语句不受干扰的运行?1 @  y6 B, f9 n% k6 n, }
3 \* G! U3 L0 G. \1 l- k3 ]4 D
答案:____________
& I! Z# a1 h/ X, \! T' `; O, w' k( r2 u5 k5 _6 P/ ~5 ]
- Y7 l2 ]/ X& C

0 w5 ~# A4 R* W' [5 u答案速查
# E/ c3 D3 U; y5 {# ^7 i1:BC7 \% l9 e2 p6 r- r' B( {6 y
2:WHERE6 k  _; Z/ y3 M& p/ J/ h! @+ J# ~+ ?+ J( p
3:B9 k& H4 y- X, v# N  i2 J# M5 i7 L
4:E
7 `& ], O& @/ ]0 b' w* I: c# G5:BD4 R2 I: u$ a, @7 x& ^* F8 u0 K
6:INSERT
! ]0 `# ~7 ?, ?4 g! |# ~7:C: c) e9 O  i9 j3 A0 p4 J
8:A$ Z9 L: ]1 \8 `! l3 V" l! Z" o
9:C6 p! c3 k" g9 e' ~
10:E7 j: h2 o& s3 B/ P
11:C2 {1 p3 m! g1 |4 V1 p/ R& e% X
12:E
# f9 Y- i  `9 S) B( e13:BC& }% N0 }( J1 u- S8 I) p
14:C
; `# ]1 i2 |: ~0 c# V2 Z15:事务% Z" A# d' r2 Y2 c: V2 e

( j+ J. G0 b& ]! Q/ i) P$ X8 s7 X) r8 Z( s! R1 L3 p0 l
* l7 W( \- |5 f2 D# f! n
答案详解
, U1 @5 ?8 ^8 |8 A7 v3 |+ y, g( X
( i  d3 x0 [6 l8 b! p+ F, l6 c6 u4 ^1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。9 \% @* b$ k; _- m# A3 d: d
" j5 Y6 f+ J, J- H! s* w# O% T
2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
; V6 C/ ?. w+ `) A
' w8 Y4 ?4 ^1 ]3 Z1 q, ?  Y% Q  K; {3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。
! U) J" P) \6 f8 E6 d/ p# L8 Z8 i. r) @
! G/ g& W6 L" ~) {: c8 s  f4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
- v2 T) f; U! ~( h! h: x, G. T  Q2 T- D8 V) f& W" w+ z$ ^
5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。2 G* Z- w  Y: g, |; s  h. P: e" i

9 {( m$ N6 @( l: Y6.答案显然是INSERT。5 ?9 Z! D( z. m0 r+ d
9 q& W( B; [/ W% f9 N: @
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
0 d& x, D9 Y& ^) Y' L6 Y' f
' }) ]$ B% h4 i5 H; t3 m! g$ u' a8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。5 S1 W6 X, Q1 H4 U2 p- X! e
. E2 c6 \/ X7 }
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。2 l3 J, @( b7 p5 ]4 @7 o: x, T. h# l

# q/ B# }$ f6 Y& B1 r& S10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。8 D# ^7 j1 H$ Y5 j

% ~* _* g1 n3 O* a: w4 G' A& v11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。; r% k% K- b- j

; ~' o% {; d, O' ^! D6 U12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
3 S& h9 o+ o" t' N
: z* S6 {& i" u) d$ U13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。% y: ?0 ~% d6 Z! u% G& j

, H/ t! F! ^. V( g7 I0 i* Y14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。# F, R0 b' G1 {/ b

+ g2 C/ x3 Q$ Q( f* R15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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