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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
* s* X( l2 u3 d+ r9 v& {, NPHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。8 J9 C4 V, J8 f
本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。1 x- d; n* _: P- g: r/ v7 w
3 ^- [8 a5 N: f2 v) P
& z+ l3 w! o* `) ]9 T
问题
: b& f& q% s) h& a# J0 e2 L, _2 K- p4 i& P. P
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)# }2 R* f9 J0 b$ R
2 @2 B! P. Y) H" O. B# k
SELECT * FROM MY_TABLE& z) C; P5 F) `+ y6 I5 W$ |9 |- c& m
; R# `! s6 q2 K8 G# v1 F$ d
A.如果可能,用把查询转换成存储例程
8 S: ~  l( m/ c* ]$ ]" c8 qB.如果程序允许,给查询指定返回记录的范围
% K1 C+ L& g& h/ `: t% xC.如果可能,添加where条件. g, P1 _4 \" B! |0 e
D.如果DBMS允许,把查询转换成视图# t9 U) h% N7 c" F7 V- ^7 r' ?
E.如果DBMS允许,使用事先准备好的语句0 S# w/ d( N$ O* c
# I6 ?/ |1 k! g+ w. U

' i/ m; y6 P$ c& A3 F1 m2.可以用添加______条件的方式对查询返回的数据集进行过滤?
5 y1 y  q- B* _% ~; i1 `' R5 J& k/ M1 y, Z' ?9 s
答案:____________
- g7 e( F% q5 g0 h- L' f; r0 d. U* m2 D4 D* c" m
& ?; H2 i* `4 r/ t9 {2 F6 ?' J3 f6 y2 N
3.内关联(inner join)是用来做什么的?
) S% \, q6 U# v( _
2 Q+ r1 l: S3 Z( W: Y2 WA.把两个表通过相同字段关联入一张持久的表中
& q' V) I3 K+ `% X7 W: r* q9 pB.创建基于两个表中相同相同行的结果集8 S& Z% M0 r! k7 J7 m
C.创建基于一个表中的记录的数据集# {' c9 D( n& D5 d" y: i
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集
; i+ E, h9 D( B4 v1 z; d6 XE.以上都不对9 L6 N$ k# B& R1 {4 Y# M
' J8 p0 N4 P; s( V, Z7 B3 b% G

8 J$ y2 b0 I5 c) `2 D1 h- ]" S4.以下哪个DBMS没有PHP扩展库?
9 j, g) Z- }& N6 H6 h2 [+ c
" k$ E" h1 I2 f2 ~A.MySQL7 d6 @* I0 G. H/ F- |+ {; g$ r8 [+ n
B.IBM DB/2! f8 L& c7 o$ I3 K# T9 j1 X
C.PostgreSQL
9 l9 N! Y. `9 L. n' f8 l* u- D6 `3 |D.Microsoft SQL Server. Z: L7 w' R+ q# H1 X# |; F
E.以上都不对
( Q- W* {9 [$ m4 x2 S1 C. x
; |# V3 I8 ]/ T1 k8 j& t4 ?! [4 K2 `/ G1 V) E2 z
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选): Q$ O8 E1 W  D! a" L
; Y7 c0 @; b6 G9 V/ ~; `
<?php, V5 U, x7 F6 ~2 e3 r$ t% s
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
3 S0 x  o* @+ M) e8 O% z+ J! n  g?>/ ]7 H% U; M  F4 ^; }2 d) I) l
4 b, K8 ^( a5 w" F% J5 n% }
A.MYTABLE表中的记录超过1条
" B/ \, m4 _" @" Y4 iB.用户输入的数据需要经过适当的转义和过滤+ P+ d+ H/ _6 T, [
C.调用该函数将产生一个包含了其他记录条数的记录
" q. X  t9 \# E% e% L; r  KD.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
3 }, ~; t0 I; r! ^E.查询语句中应该包含数据库名- _2 m  b% ^$ B+ L8 [$ i! P! O

$ v: d6 ]- e0 K. ?  \
5 H! Z0 o6 C4 F% B6.______语句能用来向已存在的表中添加新的记录。& z4 U  }; D7 w5 p: _
: r) l% f, _, Z1 c. u+ {' L" V3 B
答案:____________
! K! H' l% ?1 ^5 Y0 a
4 W2 n# \5 a7 e; t  _! u
* d  f$ L! T9 Y( W: a9 V7.以下哪个说法正确?% j* Y. A3 P0 ?% S6 u$ C
$ E& u: X: |3 G) v+ d4 v
A.使用索引能加快插入数据的速度, Q7 v2 e& z3 ^/ W$ o
B.良好的索引策略有助于防止跨站攻击6 P! ?3 Z  u* ~! W" O& Q' b
C.应当根据数据库的实际应用按理设计索引& @& i4 x3 Z, J/ n* Q2 H
D.删除一条记录将导致整个表的索引被破坏
* R9 ]- _% l( X7 B, L2 xE.只有数字记录行需要索引
$ a+ S: u+ v+ h+ ?" t7 }# f( a1 }& r6 l5 p# i% A2 C
7 u$ J) I" w/ u- u0 r# V
8.join能否被嵌套?2 K' [% A  ?' X* u

5 }* \4 S0 c7 Q& BA.能; b: y  h0 P% }; ~& O' N- `: ?( Z
B.不能
4 B7 ^0 T: Q; A0 N0 V5 r, C
5 p) B7 O6 Q- Y$ Y7 \& r2 L0 B. E) V% |# n" @
9.考虑如下数据表和查询。如何添加索引能提高查询速度?
( y% L6 `2 N; m9 o) ?' \) Q+ R( j4 Y  N3 w
CREATE TABLE MYTABLE (
% o  C+ _$ k4 ^8 L: z4 S# wID INT,
0 J6 K5 v% r+ z7 ^6 m3 ?7 TNAME VARCHAR (100),5 d0 M/ t. T4 D, s; k
ADDRESS1 VARCHAR (100),
9 Z7 k& a& N5 z6 q2 }# K* Z# FADDRESS2 VARCHAR (100),. I/ Y8 ?+ V. {# }( w
ZIPCODE VARCHAR (10),( f1 z! |2 g: q0 H" ]/ I
CITY VARCHAR (50),
( `; P' {2 H* V2 {/ G( ZPROVINCE VARCHAR (2)
9 _5 n' r9 J$ u8 |% V4 ?)1 N2 O3 X) _+ m: {, N8 w. m
SELECT ID, VARCHAR. P. o0 N- ?2 h( L2 ?/ r
FROM MYTABLE% x5 W1 i' X/ A) a
WHERE ID BETWEEN 0 AND 100
9 O( h% D  k. ~' p2 Z5 hORDER BY NAME, ZIPCODE: W; k7 _% n! c+ A7 J, V
1 x$ L+ L/ w8 p  r
A.给ID添加索引
$ s6 E6 x5 }) T* x) F! GB.给NAME和ADDRESS1添加索引/ h& V- R/ C( J* \# I& d8 d  ~- U* N
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引$ {) X. [3 O7 e* u
D.给ZIPCODE和NAME添加索引
* f* G& @" @# J; uE.给ZIPCODE添加全文检索
. Y/ \5 T/ U8 b, L5 }" F* z$ i9 e( d4 D7 p6 E$ y+ b! q2 ?
: T  ?. a* ?1 \# z
10.执行以下SQL语句后将发生什么?
3 h# O/ n7 y9 a" \! [$ L" t. |+ g# a) i- I8 D7 n2 |# b+ e8 }) ?
BEGIN TRANSACTION
9 {1 l6 J( Z' U7 t* v8 GDELETE FROM MYTABLE WHERE ID=1
1 |: w9 `$ q/ E" t6 hDELETE FROM OTHERTABLE
( z; }1 s9 a! b! Q" yROLLBACK TRANSACTION
5 G! G& a- @% i& D2 w
4 e1 x( a$ A( [6 r6 V$ c! q# O; N$ U$ tA.OTHERTABLE中的内容将被删除6 b: O# l& E" O
B.OTHERTABLE和MYTABLE中的内容都会被删除
2 T3 d7 Q& k5 o$ l; R& y7 aC.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
) q. u5 J( S& O* p/ B* a( e3 zD.数据库对于执行这个语句的用户以外的起来用户来说,没有变化. K( o( e! H/ S, @
E.数据库没用变化! C  ]- a/ b  M' O/ {6 l
9 `% U' d$ m/ t* T

- y# v; y2 B/ Q11.DESC在这个查询中起什么作用?
7 b: u+ h; f7 o+ G' m3 a
5 v1 Q9 @8 ?' u2 lSELECT *
- p/ e  j4 m/ n+ c( p8 O+ g: i' kFROM MY_TABLE
) U+ d; }& d" Y+ gWHERE ID > 02 a8 F% U; Y7 ^5 a4 e
ORDER BY ID, NAME DESC
4 U  }. `. F0 e7 K4 C. B, t( ]: S; d( l# Q# v, j2 V
A.返回的数据集倒序排列& E, D5 W& m: t
B.ID相同的记录按NAME升序排列
; M5 H. A# ^8 o# ]! e! _C.ID相同的记录按NAME倒序排列1 T. ^6 u: R1 {0 K
D.返回的记录先按NAME排序,再安ID排序) _3 I" E8 W- T' x5 z- x+ \
E.结果集中包含对NAME字段的描述
+ O& @9 v7 @# {- E& P% \% T4 G& }9 U9 Z7 @' L, ^
. I/ L" ?! }8 X- U' t$ l
12.以下哪个不是SQL函数?3 a1 ?8 N) H( h. J# q
$ y3 J7 O$ b4 y- H1 Q! O& v
A.AVG8 F& }) m% v% S, M1 }1 k% F
B.SUM2 q7 |2 b! K3 W3 ^7 M
C.MIN
9 R9 c  [5 Z) b% |7 kD.MAX
! a7 b; {3 u+ a9 N4 wE.CURRENT_DATE()
5 Z. w+ b; F9 k
* m0 O5 L% C+ [0 A2 N8 y' n' l6 _8 K! P: v
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?, g, i* y5 d' v9 e6 j7 [- z! [
$ l5 B7 r5 g" N) F
A.该字段必须有索引
& j! v; R& j$ B3 @B.该字段必须包括在GROUP BY条件中
4 y- v2 ]7 I: k0 ^* M. _  S; P5 s9 \% DC.该字段必须包含一个累积值- {/ q5 W  E9 G2 I! M' J# N
D.该字段必须是主键
) I: u( A8 O: _, V% i: ?; ]( TE.该字段必须不能包含NULL值5 G, t* n6 \- G

+ E( T5 d. F( B; t4 w( ?' w  G; J0 u2 R# l5 k+ `9 B
14.以下查询输出什么?5 f3 x, S+ z/ A( F
) D7 A$ y! t; c# o
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
4 \! O# Q9 y: h: u) K) \ON TABLE1.ID <> TABLE2.ID
/ v. _. H6 ^, z1 L, S9 n( c; T9 p, y9 M7 P9 G/ \! r- u% D( O% J, g
A.TABLE1和TABLE2不相同的记录1 T: d3 W2 r2 @8 w! V
B.两个表中相同的记录
% t5 x) O* n  \+ R2 \0 {C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
5 P1 l  C/ [8 W0 ~5 ^/ n4 j, ~D.两表中不同记录的条数
2 j9 p: m# b, f; P) ZE.数字2
- C1 {( s  n7 W8 T3 w8 A# M8 h  R9 A$ ~

" R7 j! Q, y7 p. k. ~) z" B: q15.______能保证一组SQL语句不受干扰的运行?/ ]+ l1 n" D/ x4 ?( Y* o7 H

$ P4 V; C" U1 v& a: L8 G" h* j答案:____________8 F3 |" w6 i2 v  o' R
0 i( {( U7 L. I* u# V" n9 u+ v& m
0 O3 b& J! \8 h

0 V0 Z; F7 t" V* M  u9 s答案速查$ a; o$ I8 `# f1 b4 J, @
1:BC# z3 @- l! G8 y4 F/ r# y" e
2:WHERE
% U* k# p' o: [) G6 c+ V3:B
1 l7 n5 o) }8 ]8 {6 U3 y& I" b4:E
0 x0 j6 [0 Y. Y5:BD1 A5 Q( ^, Y% k% K. d
6:INSERT
0 Y, I% M" P) S2 f4 Z6 G; }8 F7:C
0 Z9 m/ P& D# S! `6 P2 y$ T8:A
) e9 Q9 }) _8 u" ]5 K3 `6 r$ u% n9:C
2 M: N# ?" v1 D% F  F- J7 n  E10:E
' q! |  ?" @. T3 |11:C/ N" e- Q9 L, H9 p* R7 x: H
12:E% c! X7 d3 c4 f+ a, k( D
13:BC4 ^5 L8 }; z; k5 F7 r- S' M
14:C4 D  b' C6 ~3 K0 E9 O7 F9 k/ P
15:事务
4 G; r. ]6 E2 ]0 e6 a- y0 u5 S! B3 o

' x1 s+ U4 }. q1 ~2 J$ p% R( A
. @# k; h' N2 @- r. N9 X! }! D答案详解/ S# y3 j1 x" g2 i

: f( t4 I6 P: t) z$ i/ O1 y( u1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。' N. z0 H" E7 Q3 v
8 \4 H# ~% {) H6 B0 e
2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。! y: y! y) c2 u9 H$ V
' b2 Q6 V3 e# W# f; b3 R
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。
5 x7 g0 H" G7 `6 Y2 e8 `& J3 Y6 O# v, Z0 C+ e( w
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。1 @  P/ |4 s5 r8 A" R8 l2 n

+ L+ d, F$ e  a3 L/ ~6 s* T5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。. E% y! K1 _" l2 f7 X) F
8 @* ?1 O  [# ?' N; V% Q: r$ U3 T; D
6.答案显然是INSERT。6 P6 B& l: g; g' o& o) X
! l5 Z2 q0 E* {( n3 c
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
9 p& U7 q) Z' A$ E7 G& _3 X0 w9 G8 N. W3 O* @0 ~
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。" W: W, s# H( `$ Y

# a+ e+ q9 w- }. `9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
0 R% U* z8 W5 R9 K: ?% M: b
# c: L2 j$ \' {& w4 t10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。' w1 p0 U4 c# v6 q9 S# t
9 A6 r9 ~9 W0 I2 Q' l
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
) h0 G( I/ f! ^' m! o+ |' W! E3 L& T/ P* |: U/ ~: N
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
+ p  B- u4 d, v2 i+ ]. V5 @( P: o/ A; p0 P$ V6 j
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
8 u7 C! V& X( s/ F6 S5 c3 x. Z# z; W* q1 x
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。  _8 d) J% @+ ?: [5 }3 R# y
' G. K1 m! c6 {/ Q6 v" L
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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