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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。* B- s/ o+ U* U. a4 b# X
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
* W4 Q5 |4 d$ |本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。! Z" }) H# K3 W1 T; C
) u' F- U& a& a" I$ S) I

. n  V- l& |+ g9 q7 g% ^& P问题- F/ l6 r/ Z5 [" G( j5 d( o
3 Q- Q: s& y8 v$ j+ |
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)* V# G% M- P" P; x6 h1 r

# p  B9 p( U# a  Q7 \  h& tSELECT * FROM MY_TABLE9 i- U- h7 ?! U& U! m
3 ]( k( m. {1 [4 P! P8 @! i
A.如果可能,用把查询转换成存储例程) p' Z3 S9 z% Z$ Q
B.如果程序允许,给查询指定返回记录的范围/ I( N+ v5 P3 b( ~
C.如果可能,添加where条件
" b0 |  k& C/ a3 Z5 S( e& Q: a5 yD.如果DBMS允许,把查询转换成视图+ r2 G' u* G9 Q' ~3 m8 y
E.如果DBMS允许,使用事先准备好的语句) |/ c0 V. g+ w3 z5 Y6 e+ c
* r" b' S' d/ K, f1 U) w

' Y  t) C7 Q" m9 N" Y  S" H2.可以用添加______条件的方式对查询返回的数据集进行过滤?( V8 D' b" |7 g" u7 B

( f, w  T3 ~* F$ @答案:____________
) l5 U4 b9 V! @7 Z6 D* g
6 y) b# h: v+ A" T$ _( t" u9 T6 r* l" U2 a* {* E
3.内关联(inner join)是用来做什么的?
6 e3 d% W$ @: r2 B6 x( s) K0 F- M% ~  {# d; v+ \# v
A.把两个表通过相同字段关联入一张持久的表中1 I2 q6 d* I7 q5 \/ D; H1 C
B.创建基于两个表中相同相同行的结果集
" }" F# v: W% b, DC.创建基于一个表中的记录的数据集7 j$ J8 x% y  |, F3 F, c
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集
) k: ]# C8 i1 n1 [7 kE.以上都不对
: P2 i: z- |6 J, P' }5 W. ]8 F! Q" [1 @2 s3 b1 Q- A4 R
/ N0 w) }1 M1 V. v
4.以下哪个DBMS没有PHP扩展库?/ u4 U/ ~. G& ~( G6 h
5 C# [7 n4 H1 h! P# i
A.MySQL
5 q1 F. n2 M5 o8 @B.IBM DB/2  G) @0 }/ K8 b% w
C.PostgreSQL
  _% ~" v: J4 w5 ^. E" ZD.Microsoft SQL Server
/ a6 A9 W( \$ S+ P# j( K" b% mE.以上都不对* f' p* w- W5 `; n" }2 M5 I
& C0 f. q" `. T( G. V. j
& D8 o3 m, Z$ o2 \( F3 U5 m  X
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选), R) u, h# ?; S9 z9 ?' U

- @2 r7 w' F, h$ l, a7 o' @<?php
+ y& M$ n  J% k; g8 Z- f$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);/ i$ b2 _4 d7 F
?>4 R, Y) t" F0 W$ Z

% W: L' d- V% H7 u- F( bA.MYTABLE表中的记录超过1条
4 l0 d) M, L7 b3 I5 ^B.用户输入的数据需要经过适当的转义和过滤
& t  _0 @" t9 q4 QC.调用该函数将产生一个包含了其他记录条数的记录
+ S4 b# Q# ?7 J9 z2 w/ SD.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除+ ?9 s0 H  x2 Y9 C7 W# ?
E.查询语句中应该包含数据库名4 i4 O2 h& v' @" V* r

" M; t" k8 Y) T. M3 N% h; `: Y# U# e# c4 Y1 |0 U
6.______语句能用来向已存在的表中添加新的记录。
2 t, w  n( M  v. y9 J7 b6 T, v/ V
: D1 e9 J. L( t6 O7 ?3 W  Q答案:____________
; H9 m0 n$ u0 q( V8 H) R! q
/ \" e% N6 q/ @, t6 Z- Z) I+ o) h/ ~
7.以下哪个说法正确?
* n! x4 V* R) `3 l$ U& s
2 x! |+ T, R! U* E% FA.使用索引能加快插入数据的速度
' k7 }. z1 ~* kB.良好的索引策略有助于防止跨站攻击) L1 S; S: W! s+ X! b7 H: V
C.应当根据数据库的实际应用按理设计索引8 E& I6 ~7 f! q6 r( _4 L
D.删除一条记录将导致整个表的索引被破坏0 b6 a2 ]( t" `* A- ^$ s
E.只有数字记录行需要索引
  D: k7 b5 q: X. F$ c/ |% ~% P
  ^" Z( n! q( n/ C
9 T( s' g. v, r1 D% |7 x8.join能否被嵌套?
0 ?8 L5 {# g! A: g  z  ]3 I- v& [. T! s4 ?% ~
A.能
% H3 i- ?6 |: n: R5 C) eB.不能
$ X' L- o3 k- _) A. f
& \! S9 x6 `- M, V2 \6 ?, A  s- P& r" Y0 \+ v' t8 |$ N
9.考虑如下数据表和查询。如何添加索引能提高查询速度?
/ \! b% B! m2 g- f
# ^8 c) ]4 i; i3 ]% W( SCREATE TABLE MYTABLE (9 F0 `* n3 x$ p  G% g
ID INT,( C. U- k& n0 V" V6 a" f; D
NAME VARCHAR (100),6 t3 t6 T, ]! O. L- n' r% A
ADDRESS1 VARCHAR (100),
+ r0 s1 Y, s5 _/ L& F* ]ADDRESS2 VARCHAR (100),4 {# ~& `# A) o( u" Y" A
ZIPCODE VARCHAR (10),9 V) L8 }- [2 R# Q$ `* \% |( N
CITY VARCHAR (50),7 M" C1 [. G# J6 ^; b
PROVINCE VARCHAR (2)4 j  ^8 x! u4 ^7 O" P- `
)  x( E6 \' `9 j: l( {; ?
SELECT ID, VARCHAR/ y0 \9 G2 z9 o, y* L2 n
FROM MYTABLE& E* K9 N' P2 d
WHERE ID BETWEEN 0 AND 1009 O( Z# q& v# e# F0 P# ^' S
ORDER BY NAME, ZIPCODE
4 G1 k$ k% N8 U" V+ Q3 y! [' n/ @0 R9 x  I9 q2 h$ R
A.给ID添加索引- w( Q* f; r0 o) F; g* c
B.给NAME和ADDRESS1添加索引
3 b1 a$ y0 F6 m& X  a  |" X: ~C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
/ g: V( X* u" `8 ZD.给ZIPCODE和NAME添加索引
) D# h! }: B4 A+ SE.给ZIPCODE添加全文检索
; e! l, h# ~( V1 l' P8 T
7 H- J4 V+ a, x+ A6 ~. `" ^) n4 G7 a
10.执行以下SQL语句后将发生什么?& [. ?# G7 z3 s* v, f- i

" w5 U7 @# G3 C6 T& YBEGIN TRANSACTION. K  [6 K3 }" j' `6 e
DELETE FROM MYTABLE WHERE ID=13 k9 T( j7 ]- Q. d
DELETE FROM OTHERTABLE0 n' Z! I0 L  ~( z; V2 a( o
ROLLBACK TRANSACTION7 A0 G! H) c$ ^0 u% c2 W

; f' u* j! Q* KA.OTHERTABLE中的内容将被删除
2 O2 V6 h% X& E2 \B.OTHERTABLE和MYTABLE中的内容都会被删除/ t7 z* s7 Z8 _( x, {, `/ ^- h
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
0 C* N* y6 q2 I' VD.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
; M+ w! a- m! O3 O7 WE.数据库没用变化
6 i  r+ u0 N1 N* q' o/ Q( V3 i" b$ k: f
: Q4 C$ z% N9 |0 m* u' s2 ~: E8 }
11.DESC在这个查询中起什么作用?
+ R+ }- K& B! q# K% O
0 n  L7 C% @: Z4 f/ {SELECT *0 z0 _, [0 L" h. k2 O" C/ J; N! l
FROM MY_TABLE
. ]; p) ]# F6 W" IWHERE ID > 0* n; h2 O+ y( h, d
ORDER BY ID, NAME DESC* e- B, f7 m* R2 P% {

/ a: \8 k! i  D8 ?9 SA.返回的数据集倒序排列7 a9 \& I8 F; [, U4 R# u. z( u
B.ID相同的记录按NAME升序排列
( ^1 ]4 {& i, Z0 L& C3 z2 ~C.ID相同的记录按NAME倒序排列
& H& x' L$ t- ^& f# T0 j0 tD.返回的记录先按NAME排序,再安ID排序
0 Q; d& }" r6 }E.结果集中包含对NAME字段的描述: d# b5 P5 z1 u" q3 T
/ K1 T; e4 C0 B3 j
  w2 v7 R- Q3 `% ]
12.以下哪个不是SQL函数?& W3 u8 q! F2 V3 ~) q" a2 R5 n
% E* O; h, z7 B5 w
A.AVG* V# \/ X5 n, O6 h1 ?+ S; J
B.SUM0 u7 P0 N# t2 @8 m; ?/ P; m
C.MIN% b9 h! r6 z/ e" U% m+ j+ z
D.MAX+ c4 n0 ~2 \8 r9 ]& l- h" x
E.CURRENT_DATE()3 V' ]9 J" ~- ^- g, X

; g0 c- Y0 r* e2 d- B: V
0 a; h1 w; P; g) b1 u2 W7 u: }13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
. k: [. f8 U& u! ]" u* Q. y/ b8 F9 J" j. Q0 y
A.该字段必须有索引
/ P* z0 w9 J7 d9 {) F/ CB.该字段必须包括在GROUP BY条件中
8 K. R: z6 \+ m; QC.该字段必须包含一个累积值4 j7 k- K) R, t& s: ~8 Y' ]/ [! p
D.该字段必须是主键. A' l; _  F8 ]$ O" e8 f4 @
E.该字段必须不能包含NULL值8 ], s; l& ]+ j

: r2 h" n! e0 q  g
  i! B$ l( X, w- J14.以下查询输出什么?
/ e6 t! Z+ v$ @# T# q& H+ ]7 y7 O& f! e$ q  h+ L2 O1 e$ y/ L- y: Y
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2" R' F; T1 _, ^& h) @: G8 L. F
ON TABLE1.ID <> TABLE2.ID6 O2 v; {9 x  a! r+ Y7 y& [# ^

5 k. b. s! e3 I- D1 D; k& F3 KA.TABLE1和TABLE2不相同的记录/ G& O5 G3 k5 j& t8 Q0 \
B.两个表中相同的记录
& ]1 t9 u1 g2 I: u/ i) B2 M* ]/ ]C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数. \2 @0 M# J0 i) v  r% e, g% n8 s! j
D.两表中不同记录的条数
3 O3 \* Q3 Y, i8 K9 R$ ~E.数字2, M! C3 H2 V4 g1 L9 K6 F* `" w

+ u- @; c5 P4 V% _0 O) @1 }' z: _6 V
15.______能保证一组SQL语句不受干扰的运行?
" _1 f$ w- Y* T  k2 v9 o  c9 y3 S% G5 k- I
答案:____________3 N3 z5 v  ], j+ A

% ^9 M) x% x3 d, m! q: D( S0 l
) h3 ^( _# w6 K
; I5 H$ e9 |3 t) p7 j" T3 P答案速查( k0 d# v3 K/ h! `! V
1:BC+ M4 ]8 A$ }4 q
2:WHERE0 p. f) U) E3 P) g; e; J6 [, o. T
3:B
& B" J8 m& n  |* T4:E" b# }) y% @8 m* m
5:BD" @  c& B: S5 |8 Q3 S" c
6:INSERT
7 b. n; I3 E9 ]5 @+ a, U" o/ t3 {7:C
2 ^( l# Q) I7 \! c5 v8:A
$ L6 g# U0 F" k" i. E1 d; c% V: C9:C
. K, m; L9 B/ f  ~' _% R0 ], i10:E& u5 D& k" c  b( v! u. Y; D7 g  s: ^/ f
11:C
4 c. F  _  p3 k12:E( W4 q/ ]4 m" f5 x% y3 k4 k; ]$ h! X
13:BC& \3 d6 n  i2 l$ U6 l6 t
14:C, G" r/ a6 Z% U, z& i# V4 a. E1 j
15:事务7 e& I3 q. c6 F+ u' C
" ?! Y' `) [  {

1 j7 P% l" |& Z+ N
1 \* l: u. B6 H4 H; ?9 p. I答案详解. D8 E0 A) O" P& }1 S
+ j9 x# W' P7 b2 ^- T  ^& W2 ?
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。5 `3 R# H6 ^8 h( W& O
3 X' ^+ ?! _! l. w, {6 @& @
2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。# l8 B% ~  ?7 [5 F

; Y/ @* |' Y, M2 M7 q& w3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。1 e+ M+ z9 z4 h8 r" X$ b# s1 K% l
; K1 U  d' s# X9 \5 U* \- H
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
: o4 u& d$ I+ }: ]4 l0 M: ]' e) y$ u+ U& h
5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。
' v: j, z% N6 g8 K3 T8 K, b) y8 a# Q# y+ m
6.答案显然是INSERT。
2 e  _; [- k0 T9 A9 }4 d+ n/ J  t9 }# h" i& q/ |
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
5 N7 {' g% x6 ?  K! p8 {4 n. {2 _- g7 W2 F: C2 w; ?# Z
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
: [2 F7 r, j/ i4 c9 Q: u& j  d% \0 J; e! I. E
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。+ t6 Y0 T  E3 O1 d& w

4 V$ b9 W+ y+ _  F- X, r* K10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
, S5 [7 W1 x6 g" ^9 u" ^2 J% L* v1 o& a0 c
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
8 K3 i1 Q: p6 v9 D: S* I$ {
0 g4 L$ d3 {9 F12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。% e, j- f8 E8 }- a6 |, J
, R5 ^  o0 p# o2 n2 a9 x. h
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。4 e5 B& `) |+ P, ?* i

( k& S% Z) [6 a$ v. u14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。/ Q# N/ C* p& `  k# |, n! W/ `5 V/ [3 w
7 y3 y" X' S; x% B
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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