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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。$ m8 L0 N2 _. L# I; S
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。$ n1 K- d4 B- l
本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
4 N% w/ o, d" T: @% l9 ^% q$ f* w( a( q5 X6 z* u

* Y5 U; B: E+ v! v, r7 X问题
. D- r1 F* Z+ w% R& S6 r% c8 ]9 w5 A4 V0 I. m2 |
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)' e3 V1 @2 |: _: ^  E

( s  w) I' _( c+ j0 GSELECT * FROM MY_TABLE
+ N8 D# v9 \4 h8 t6 o1 J3 q: U8 f% w$ f0 t
A.如果可能,用把查询转换成存储例程* F- i0 g  q+ u* v$ r6 j7 F
B.如果程序允许,给查询指定返回记录的范围
3 {: H( T7 B, n  O. {$ NC.如果可能,添加where条件
) P) Y: T* F2 I; K0 m8 l  TD.如果DBMS允许,把查询转换成视图
- }# V; ^! I" x) PE.如果DBMS允许,使用事先准备好的语句
) o6 u! w# f8 }* D8 H% F$ k
- w9 c6 x2 R0 \6 ]& n) C/ \% m- `9 I0 s7 q% K) M9 @& K1 |# ~" U3 d1 J2 ?
2.可以用添加______条件的方式对查询返回的数据集进行过滤?( C: J& J( l7 d. I

4 {$ S# F& ~& E4 e答案:____________
* C" z! D1 p+ u
; N2 L/ @# ?+ ]) I) V9 E
4 L' X0 z) q; A8 v, A3.内关联(inner join)是用来做什么的?
* |+ G% s; R, f) a( p0 b/ N9 u! m, G0 {8 c6 A
A.把两个表通过相同字段关联入一张持久的表中* V# Z; L* l9 m
B.创建基于两个表中相同相同行的结果集5 P) o3 {( W# M* x$ L7 x
C.创建基于一个表中的记录的数据集
: ^( }0 l2 ]2 `' @1 j4 B9 v7 p* }( pD.创建一个包含两个表中相同记录和一个表中全部记录的结果集
' m; v$ o4 f3 A, mE.以上都不对5 c) c4 I. I# t

/ l* M" C. ?1 n' L# s
1 a# |0 p+ x; t3 X% E( W4.以下哪个DBMS没有PHP扩展库?4 h- D0 K1 H8 }+ g! c5 h8 A3 a0 e

4 m5 f: P- _4 P4 m. W/ p- K. z5 c7 NA.MySQL" s; T" O/ k3 o: w
B.IBM DB/2# y) e; U0 V9 g* e- N5 y  l& n
C.PostgreSQL
7 V. B! U3 V; y. g0 T5 J0 qD.Microsoft SQL Server$ S3 K4 t! v' r0 t
E.以上都不对
) H% g( u$ j: p. ]5 m
7 v2 R/ Z' S! g8 |3 R8 S4 D' T6 I# i* y/ V* j) F
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)) J5 W# k4 A& L1 h8 y
* K8 F  U- ?3 {- o% L6 |- O
<?php
4 ], |3 S: `! f% j& h: s$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
- ?  k- v% k; ]  p. l?>
/ X( O! g" R* h. p0 O6 s( c6 c" }+ E4 T) @( t% w
A.MYTABLE表中的记录超过1条
/ d$ z: [$ @2 m  C3 R( UB.用户输入的数据需要经过适当的转义和过滤
' s7 ~5 I5 K$ p  ^% P8 c! wC.调用该函数将产生一个包含了其他记录条数的记录8 y, o1 N* n) D3 a6 M: S
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
+ W- t- i# r8 n' C+ y- p1 `E.查询语句中应该包含数据库名9 `  y7 ^6 F6 |/ O4 ^# K9 r
1 y$ X, ^! U% u* h9 d! l! n
6 W+ k- }: @% g* i  r7 h
6.______语句能用来向已存在的表中添加新的记录。3 b  a$ D  u$ L

, Y3 E2 ?/ |; A" l答案:____________' p5 H3 {5 X) @! h) E! g

) V  A7 Y. R7 B, g6 E
/ e/ ^. c/ G) s- ?+ [7.以下哪个说法正确?* M$ X3 n: H8 M+ `
+ a- H' E! P4 M* C! Q* Q" }
A.使用索引能加快插入数据的速度
- g' ~' |) h, _1 v# O+ U9 BB.良好的索引策略有助于防止跨站攻击
* c$ J) M$ g+ q  P! m4 h( oC.应当根据数据库的实际应用按理设计索引3 W5 [, o8 u; Z1 E
D.删除一条记录将导致整个表的索引被破坏: L6 a) S5 k! W7 Q) O
E.只有数字记录行需要索引) E3 w; [* j  j$ |7 _; }. t

3 _+ l9 `3 ^) l+ t) s, _6 _8 L
8 Z& S/ @- W4 C& t0 C8.join能否被嵌套?& e; Y9 x" ?. }9 i5 Y
3 B; l+ W* f2 g, r# p4 F3 v
A.能& ^3 j6 ~5 p! W3 B
B.不能# r8 [, z" I7 Z/ v0 l& `: J1 ~

9 q9 b$ X6 F9 {1 b( E7 v8 Q" i) Z
3 m1 V& B% q3 l+ Y3 l9.考虑如下数据表和查询。如何添加索引能提高查询速度?4 ~: f7 B3 V" L
" v6 o; N& N: h4 ]0 I: {' I
CREATE TABLE MYTABLE (( W/ w' @2 T5 z& a+ M
ID INT,
" T) s% t( x& ^1 H& e% T2 M: lNAME VARCHAR (100),/ }7 x* E8 ?8 @' \" R
ADDRESS1 VARCHAR (100),
% }& h- g2 M2 }' o4 oADDRESS2 VARCHAR (100),9 O2 O( c. G: \; S$ `0 k  J
ZIPCODE VARCHAR (10),
1 F  k+ e- s  S& _$ U0 zCITY VARCHAR (50),
+ e* V$ B- f( u) R/ e: M) M3 sPROVINCE VARCHAR (2)
6 {9 T" _* w1 B. G$ p: U1 H); h* `* a8 {* |3 t, B! p2 a
SELECT ID, VARCHAR/ \: H: u7 x* Y. Y/ k% E
FROM MYTABLE# Q: s9 C# {9 |4 h) Y# ]- d7 V( ]) X
WHERE ID BETWEEN 0 AND 100
9 Y  [/ t: D( N+ q. DORDER BY NAME, ZIPCODE
8 g. t# z7 m4 e" h# b4 e" S1 ?  x! |3 \
A.给ID添加索引( r4 H* {# d5 F+ h
B.给NAME和ADDRESS1添加索引  t% a+ R0 b8 @) }% G
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
: ^* I; l" k# s- }; kD.给ZIPCODE和NAME添加索引
/ W/ O2 y% e- g4 nE.给ZIPCODE添加全文检索
) ?5 n* U3 x: f6 @2 c& v. ^. i/ b% f+ }2 z; R9 s1 A
) a& s9 i( Q3 F# ^8 g
10.执行以下SQL语句后将发生什么?
5 L* i# ^" A" d0 a( J
8 G9 R( Q  ]1 GBEGIN TRANSACTION
. E5 f9 d. i$ Q. d8 d* k% nDELETE FROM MYTABLE WHERE ID=1
: e' ]4 T. J+ E; c3 yDELETE FROM OTHERTABLE3 G$ W; Y! M' Y7 y4 T3 _
ROLLBACK TRANSACTION7 x" h9 w1 ]6 R) \. a
; U! M* ?7 b7 y1 n6 \
A.OTHERTABLE中的内容将被删除
7 |# X( H$ [0 d8 a  {4 MB.OTHERTABLE和MYTABLE中的内容都会被删除! p0 \! g7 T. s' y" m8 w- r
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除: ]* K9 k9 a+ ]# y6 s& g
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化' \: ^1 Z' e3 _3 n  v. ?/ R
E.数据库没用变化. p! b* i; G, s9 u* I

" m; v) ^- G, ^5 _
/ M/ c( g: @8 x# V' {+ {  P11.DESC在这个查询中起什么作用?. G! ?- T4 }* O: J/ O
4 V! M& o! c& C  S2 B5 f
SELECT *4 F: G! Q- v9 Y# A: g/ B  `* e2 y
FROM MY_TABLE# ^. k& Y2 E% ]
WHERE ID > 03 g9 N5 T! G# c
ORDER BY ID, NAME DESC$ {( @  M0 G. r
! S& [# i! {( @" y) Z  N. l
A.返回的数据集倒序排列7 ]% w& U9 P& u; Y% G
B.ID相同的记录按NAME升序排列' y8 v# k! M. Q( y
C.ID相同的记录按NAME倒序排列" H8 N$ S6 Z1 a+ N( F
D.返回的记录先按NAME排序,再安ID排序
! P0 n: {, ~" D) q& G) eE.结果集中包含对NAME字段的描述: v  H6 o) t: ^/ D% B, G5 n8 b4 N
/ B. V7 |% S- B  \4 X. j( n% L

3 @, Y: _' o" ~: X12.以下哪个不是SQL函数?
: N8 J9 \2 {0 X  ?6 s. |* q: c  X% _2 g' Z/ S
A.AVG
5 p* ?: b: ^) ^B.SUM' }2 Z6 t+ q7 \' l' \  R
C.MIN$ D# k9 L: j+ q+ Z) r4 u
D.MAX: K2 N' e, Y' X* A  b; a) S! O
E.CURRENT_DATE()5 ]# I# U* z- J1 X- ]

) R2 ]& R# B# \, l, v3 A; L% o
. z; E$ h- N9 w7 t$ N, T13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
/ i/ o  T$ g5 M7 Y! R& k' O- p" ^2 @7 \; @8 Y0 t/ g
A.该字段必须有索引
' f" U7 |- E0 \4 w! qB.该字段必须包括在GROUP BY条件中/ `3 k/ T9 D& l" J+ G. Q: g
C.该字段必须包含一个累积值
: Q6 K4 @9 R1 G& Z1 |D.该字段必须是主键
5 @. C( L/ C7 g) OE.该字段必须不能包含NULL值
- G# s2 P" {0 S5 ~# c+ u* ]
  a: h8 ]5 F8 k4 Z: h
; J" Z/ S/ E" I2 E# ~14.以下查询输出什么?
2 V+ d. n- Q+ P3 V) S# }2 d8 H7 B9 h
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2* J6 c% I- v5 y7 ]% z3 d! J
ON TABLE1.ID <> TABLE2.ID
4 A+ t, n- g' c$ y+ _: x! ~
$ w( X2 f  ]( P7 n1 O9 U3 TA.TABLE1和TABLE2不相同的记录; M! l, w6 [7 k1 P5 I8 K
B.两个表中相同的记录! s" p( q% u: F$ o" v* p; f( Z' }
C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数  W% x1 H' ~# e& M2 B
D.两表中不同记录的条数, |4 q8 \: i, `! U$ l3 E: _
E.数字2& A  n% g* `4 |: _6 k
* X3 w3 B# w% }, b3 m
: T" q3 t' X- [1 r
15.______能保证一组SQL语句不受干扰的运行?
; W1 X+ k/ b& U0 q: `2 W7 M$ n. r- x1 m9 [  G
答案:____________
2 n* v) [& x; N- A+ H. m8 N1 J' p6 |. z$ |
6 p) e1 R* p9 ^( B
1 @* v& b! Q1 R+ ?, N: L- C. I/ S
答案速查! W( J- k. ^2 J" {& u
1:BC( e; [6 a! l% H) `, }) w
2:WHERE$ N. C, G! d" H# D8 x  o' V
3:B
$ n5 O' g% R  ^% u2 k$ U( e9 \. ]4:E% R' M" V; t# f. R
5:BD
; m) U2 E1 p  k$ ?$ a- K6:INSERT
) m2 b. ~0 [5 K. M7:C3 g& w/ D* E& v" v
8:A
3 L: K# h# Q0 r3 {2 m1 V9:C
% P/ [/ t& m( @2 a; f10:E! N7 R7 S* ~# I. k3 v2 o
11:C% V" {+ y, C0 r9 m; O0 ~5 H
12:E
) [) _" R" A! \) c13:BC
# m$ W7 [6 b6 o$ _7 d4 F14:C
  B$ W/ @  i4 j7 V1 ?15:事务" j( B# I3 ]& L! w' s/ y

) R4 Z- ?, ~( `1 I# j
2 _0 m: l% f; r* y# h% e% Y( K% n2 f6 J( V
答案详解, _. b2 Y$ j; s/ U4 L+ _

' {9 _5 x: V+ k8 C4 T! d7 g2 M3 o1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
. B! o3 u3 a/ y9 J' m( _
) a1 e2 g% v+ {5 u/ o, P2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
8 V+ c( @( _9 d! k& a& ]7 Z, o& `- N) P# D- C) t
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。
) a) o4 ?* ?3 T# U3 b+ e% C1 d4 y4 I- |* M
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
, `+ t4 L/ _0 c% c
  q7 |2 k, [* p4 {0 s  {5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。; G/ X* M6 p5 W
4 i1 X9 H" r7 r* y$ a3 W' R
6.答案显然是INSERT。
  |$ j5 g! g: W" e0 a8 @$ N( c0 F( v0 W. h2 k4 d3 T9 k
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。1 S$ O& J; _# p
; u3 L! d# {( M* l
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
# A7 [9 ]) Y) ?8 [  A
9 q; @5 y/ M: N6 ]& l% r9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
% W+ J  o8 k% Z6 H0 B
0 S) G9 t3 _' ?1 Y/ i10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。" z& X6 x, \2 s' J5 G0 K8 q3 [$ m

$ Z4 L# F7 X1 _( r11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。2 j0 M# e1 Z$ F2 \8 M" w$ ]& ?: c

* V( w6 ?7 b  o$ @: Q12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。8 K2 f2 N4 t9 R2 t5 h  @: [2 D) g* d( X
0 Y! v; B& x6 J8 m: A/ U, ]
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
, ?: J; @' i5 {$ Z; @4 E6 B6 h* H, D" p
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。
2 F/ A+ C- h3 S) I$ |& W# Y# X, {2 Y
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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