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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。4 X& n. N5 W4 F7 k1 r
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
2 w: f( o$ ^4 E' A本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。5 a9 z/ B6 c" K0 z

6 ]7 j5 s( V# J
3 V' Q1 c6 E$ E8 M( O问题+ [$ L7 H9 h, c. F  X% @" ?+ E

# f1 j2 }+ [  N# Q) m0 s1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)
) P2 D8 P4 V( P6 E& l# A6 u6 c
8 y1 u0 Q$ T$ Y  N* N. ZSELECT * FROM MY_TABLE# K7 Q+ I1 J3 h" Z% w% [8 u: L& d
' M& t6 m7 Q2 ^& @
A.如果可能,用把查询转换成存储例程
/ b6 U; |3 C. z0 t( LB.如果程序允许,给查询指定返回记录的范围
( e5 i+ `2 I5 k+ Z0 G  U' x! xC.如果可能,添加where条件
1 i, b; ?8 G: C* D/ S$ x7 M  r, g/ N$ q) VD.如果DBMS允许,把查询转换成视图
- Z7 L5 M9 B$ s( I- E" eE.如果DBMS允许,使用事先准备好的语句9 i! }% o' G- L4 B* Y) X* W

7 _7 `  `0 W6 A* h( q
: G: z+ r/ o5 @. u# x2.可以用添加______条件的方式对查询返回的数据集进行过滤?; Q1 v, N  |. n7 Z& U% p4 D

) v, M8 b  P1 \2 }答案:____________& E, {* G3 R1 O8 z, X# P, V: Y% |
: I1 E& h/ X3 |& z/ ]( o

- {; S5 p; J/ z/ p3.内关联(inner join)是用来做什么的?
0 f6 o3 a( ], v' i+ p2 k
3 w9 d; y: t/ g6 n( i' ~+ _+ [A.把两个表通过相同字段关联入一张持久的表中( |2 B# O: I. ~6 W9 r
B.创建基于两个表中相同相同行的结果集0 @3 {$ C( W' P: v! l4 ?% l( A" V
C.创建基于一个表中的记录的数据集
; j9 G" B5 ^" V8 Z5 Q0 s( J& HD.创建一个包含两个表中相同记录和一个表中全部记录的结果集
" x& Y; ]& ?4 }$ i* D: @1 oE.以上都不对6 N2 i" l; E9 l7 c5 J9 C" x. b
* _1 e0 u# z+ {& k# E' q
) y* X7 b2 ^3 c2 Y' W6 D
4.以下哪个DBMS没有PHP扩展库?9 `( z3 i. `2 u9 X: r0 v
, x/ A  Z, {* n5 _5 Z% ~
A.MySQL
" M+ A% k; o, x& e; N1 m  RB.IBM DB/2+ \9 V& C5 u8 ~( N7 Q
C.PostgreSQL& u6 {6 w; u# Q3 r
D.Microsoft SQL Server2 }3 w( L$ U( {
E.以上都不对$ ^) W, ~& s* J# B4 m

( [; ^* l# v9 L4 ^8 Z2 D2 H6 G' g) A9 @4 L
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
+ J/ A& Z0 ?  L0 T3 N4 g" e1 h2 B& K2 V
<?php: g9 v7 I( j! x% Y, C% y
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
. g$ S, C6 k: f% z$ D( z?>
& T8 `$ e# Y% U; v0 o$ P
, M) y5 {- R$ CA.MYTABLE表中的记录超过1条
6 f1 t! f$ u. t& hB.用户输入的数据需要经过适当的转义和过滤
+ R2 p8 G; Z' Z) Y. hC.调用该函数将产生一个包含了其他记录条数的记录
8 U  V0 R  J; h- K) T/ ?: @% AD.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
! {& `$ O0 r6 b3 t3 u% w( ~' t4 jE.查询语句中应该包含数据库名
/ E/ J- F8 k, O& R  Z1 J7 F9 r9 q! W3 |; R

& h5 P  `1 D6 j  E5 {- B0 ?5 d6.______语句能用来向已存在的表中添加新的记录。. N3 M& a' @* m1 w( H# W/ X' D+ g
' p3 Q7 j' M7 H( C7 Q; P" c7 r# n% m
答案:____________
/ c* m/ F# }' V7 G, t( F% Z2 s/ ^% N' Q
9 ~9 B. c( M: `" W
7.以下哪个说法正确?
0 ~8 P3 I: E% q9 W
& v6 m; |3 j4 }3 O4 P( v6 x# LA.使用索引能加快插入数据的速度* j* ^  Q6 s2 E) u" w: O
B.良好的索引策略有助于防止跨站攻击
6 T/ I, `- K( L/ q7 UC.应当根据数据库的实际应用按理设计索引. U* v5 @% ^( J# A9 C! e; }5 x4 ~
D.删除一条记录将导致整个表的索引被破坏  a7 W. ^# K, a! }  {/ |/ r1 J
E.只有数字记录行需要索引
* Y. l4 L! O, I% W6 v% y6 {/ P7 a# K2 s+ z' {2 l+ k
# Q; `- F# l9 T, y# R  N8 a
8.join能否被嵌套?+ f7 Q. B4 D7 |3 N/ c* w8 h# J
. |  Y1 V% C& t/ i- x9 O) |
A.能
9 c% Z  }0 p; j" W4 O/ [6 j$ C! |B.不能
& @" c6 C& q* S# I: ^5 W$ {5 y4 p7 N- x4 f- Y0 q' ~, M

$ F, N* ?! R: m$ [9 Y" L9.考虑如下数据表和查询。如何添加索引能提高查询速度?8 a; ]( q& A& \% I, c

& {  M9 P) S1 F" i( N* ZCREATE TABLE MYTABLE (6 \% ~  p) V) E$ k+ g: B/ T3 u
ID INT,
1 Z! E+ @/ C9 g& jNAME VARCHAR (100),
, I" ^: X4 {$ o0 E) V  jADDRESS1 VARCHAR (100),
' @! S2 @* ?) XADDRESS2 VARCHAR (100),5 u2 }+ ?. x- _1 W6 Y
ZIPCODE VARCHAR (10),& x5 Z  x- [+ |* f0 v. S6 l. J
CITY VARCHAR (50),
8 Z! l% B/ M: b4 _: PPROVINCE VARCHAR (2)4 F- U3 i' `& `5 K2 ?$ L7 I
)
3 V+ O8 P- a- sSELECT ID, VARCHAR* `1 q, `) `8 |! f5 z/ d( d9 t0 j9 f( w
FROM MYTABLE/ F2 m8 W- I, j! I
WHERE ID BETWEEN 0 AND 100
1 N1 v* u8 o+ v9 cORDER BY NAME, ZIPCODE
$ h- H) ?/ u$ A6 v
) j5 B2 |( M, K9 n8 A9 L9 VA.给ID添加索引4 n2 _: k+ c' `3 ?# I9 g3 c
B.给NAME和ADDRESS1添加索引) \; Q1 t3 K) n  ]3 R8 M
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
' g6 N+ V; d+ s) C( ]# {6 i) FD.给ZIPCODE和NAME添加索引1 y. X2 ]9 Q5 I& r& z0 a
E.给ZIPCODE添加全文检索
3 [! [1 V5 L6 d$ q' ~$ M3 ^+ d' ?1 P% V) b* x5 R$ x

3 S  I& i7 A; z# q) w& G10.执行以下SQL语句后将发生什么?
1 S6 P; c5 i1 g+ y
4 j' F, B) h- I) w* z$ cBEGIN TRANSACTION
+ j0 u: F. o5 `" B0 v6 U1 W/ YDELETE FROM MYTABLE WHERE ID=1
) J! H1 P( x( f3 a2 gDELETE FROM OTHERTABLE
' i  ?9 Q5 U; ]0 q4 O, w# y4 RROLLBACK TRANSACTION
# ?& c- C* |' [0 p8 t' p6 r1 R! J& v
A.OTHERTABLE中的内容将被删除
- P4 b4 P9 N6 C  gB.OTHERTABLE和MYTABLE中的内容都会被删除( A6 l% p+ G: Y( h
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
# g5 V, Y4 E* O1 q  i0 {D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化3 D( d1 p% b3 w/ N
E.数据库没用变化+ ~; Y1 S, P( _$ W# s+ n

' F9 C2 i) a! P+ \" x# T; Q' _' ^8 T5 V5 j9 t/ ]
11.DESC在这个查询中起什么作用?/ }8 G/ ]: i/ R3 k( c: ]3 g

1 A, X  Q# D3 E4 y3 l5 W$ SSELECT *
6 H: I: x& C6 l, a% AFROM MY_TABLE
7 o$ }9 V+ x8 v: e7 T4 `0 TWHERE ID > 0
- {1 f0 f' X& x8 a2 _ORDER BY ID, NAME DESC3 C3 `; Y; Q. J$ R0 t/ ~9 A
* F0 X+ S3 T. B$ v6 x
A.返回的数据集倒序排列" E4 u  C( T& d0 B$ h
B.ID相同的记录按NAME升序排列
) e; V: f2 A2 q) X8 O9 p( s! I1 s' nC.ID相同的记录按NAME倒序排列
; F: q% }) D; rD.返回的记录先按NAME排序,再安ID排序) x5 A3 a. F9 C& |- T
E.结果集中包含对NAME字段的描述
1 V* O! I4 O! Z) X% F6 c0 Y9 S( \' X% O( ~4 j& ~7 T
) i  \  r" s( r) j  U% s
12.以下哪个不是SQL函数?- `. a' f9 G' y" ?  W8 m# u* v
4 l$ |5 F- {' P$ W1 U
A.AVG
- d- v' L' n4 B9 KB.SUM
6 |$ U, l/ e+ a. j; v% y2 y- aC.MIN- L3 x! r3 Z6 T& c
D.MAX4 q8 a; Z$ v; R1 ?
E.CURRENT_DATE()9 A4 ^* l3 f" B  ^& w' \

& J2 ?$ x9 J# Y4 X$ s6 L" `0 c: p5 s: |) W
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?+ T* E0 F1 ^( J7 w! t6 u9 ~0 ]

: }" d0 X* O& Q) z$ ?( i; U# @% }A.该字段必须有索引) L; X9 B; R0 l9 \
B.该字段必须包括在GROUP BY条件中2 N" b. {/ i; n" |9 p3 j1 m, C
C.该字段必须包含一个累积值# E- G$ \' L6 h8 t0 u- Q
D.该字段必须是主键
6 \  F% U) O' z( j8 ~E.该字段必须不能包含NULL值
9 [0 s7 ^/ o. j- ]; L- \# u2 v; N3 O

& i8 w4 H; U& {14.以下查询输出什么?
( m) y4 G9 b/ P6 h
* y, U4 l" N$ b9 l' QSELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
$ x7 e3 c, w3 p; I9 S/ V2 i" e7 SON TABLE1.ID <> TABLE2.ID- R3 c7 B  K, F1 A

6 s( G, B2 _/ e6 G$ a" wA.TABLE1和TABLE2不相同的记录. c, x1 |, O- }( E& e9 H
B.两个表中相同的记录
2 e$ x1 _# d0 k; \$ z* sC.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
2 l, u" K/ b7 ~( M$ o1 o4 P/ lD.两表中不同记录的条数
# f2 U" p5 d4 C5 Y1 F3 b  G/ X7 I2 vE.数字2) k' ^& K! S- v* S% p' \0 u

5 I/ d5 l  E* ]7 y" z2 g' o
" E# \) L9 Q& G+ C15.______能保证一组SQL语句不受干扰的运行?# M* o$ \7 D; ]' S" @
+ i8 B. I0 c# a; C2 ?: p
答案:____________
$ K: O7 M, V) l" N0 Q% x7 j0 e" l# G2 ]- E

8 I0 a) M; z  D# |' p* F
3 d# [; q: ?+ j8 K" }  x. L' j答案速查
3 [" ?2 z( r5 \5 w3 @6 U' W! D1:BC
) {$ d( S5 E- V' P' O. I3 F2 P2:WHERE6 @, z  i+ |7 n' ~  N6 P- n; R
3:B% ]7 p4 X# q7 a- Z6 i
4:E
& q5 h( K7 \" V3 f5:BD
) L: c8 Q9 j+ `: J% q# {6:INSERT
2 T6 u0 d* I6 A$ s3 R7:C
, w! `. T3 V% Q  _& e2 _8:A! {; X; v% I% F# v$ `, t
9:C
& Z* |) h  P3 z/ A: X4 ^10:E; u) r4 l4 e: }( g
11:C
: b1 R/ u1 G  d# I, _+ X+ n12:E, |- L5 I$ C! @3 }9 \6 E
13:BC. V0 M$ k+ s- ~& z4 x
14:C
& @" f1 a  |; X" m- m3 j15:事务0 P+ [& z, r! G

0 `% u; A1 J7 Z% |/ F% }9 X1 W4 B4 ?  m3 c3 J
7 M8 j$ X  S8 V' A* R
答案详解
4 E* j3 P8 ]& H4 _7 Q1 l" G
. }' ~8 m* `6 d  [/ {8 _3 {1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。4 ^" D- Z) T# F3 l
- t* Q0 I$ T" E. w1 L: G
2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。* V3 g/ v6 P, E; b

" r) ?* g/ w) M' I* u$ F, A  P$ N3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。  [5 P/ W! u: m! I, l

" K4 P! E7 ?: {5 ?4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
8 g, k* M' l7 o2 H: V4 m$ P8 }1 j) b& ]0 R$ Y& H0 l% @3 x
5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。. G2 }& [' b# U* u

, A8 D; n% Z3 i6 [& s7 m6.答案显然是INSERT。
  c7 m5 p! h) O# G5 ^9 u: o3 F" C2 u- A" H" H7 l; K3 L& ]/ S
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
1 R# f/ y: e1 d4 b- d# e- a# a
, d# q0 y% ^/ ~9 }/ k8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
& H* r# r, M2 k9 {
+ Y8 q* k0 x1 F9 @: ]! M) S9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
6 P1 F3 k3 ]" J( C; y9 t$ @
7 B  Y; m9 n, Q5 x7 W10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。" [& y6 O" e2 }" O

$ x2 H6 d2 M$ m" e6 V7 L" O3 t11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
8 U6 D( F5 u6 P. t6 e/ I
! H9 U5 U! [+ X, b7 V4 @12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。7 g/ A* _% t5 g  ?) R9 i. B
/ |% X$ J" }# h: |* Y
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。0 I0 M( O- x, d* @, s9 L2 @
# U: H7 A  V! A2 I$ W. v
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。
1 ?0 D! A) K5 L$ n
  q6 T8 A1 |2 t15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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