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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
& x0 Z( }% [9 `, e' G! j( mPHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。7 K+ R, [' E  \: \& c
本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。; J& ~. T* P$ O/ d% E

: A1 k3 a% J1 ]3 A$ L- g/ [
+ {' c4 o! f0 @; v问题& e( j; w; W+ p6 c( d

6 ^" c+ d; D0 T; g" Q8 u  v1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)
2 e! o% \- v- i5 R4 Y
1 B6 E4 l3 d5 i; ]" |" P, qSELECT * FROM MY_TABLE
% I6 x, l. o, Q7 m( D) ~  |6 F' n
$ y$ d; A* @+ V$ w! h; B: xA.如果可能,用把查询转换成存储例程3 H" j. H  V3 M7 b: ^
B.如果程序允许,给查询指定返回记录的范围
8 f- }0 P# A% P' q1 a9 a; M5 SC.如果可能,添加where条件" P8 H, z! _% s- ]# h  R! ]
D.如果DBMS允许,把查询转换成视图2 s3 ~1 m: ^( c- V7 a4 Q
E.如果DBMS允许,使用事先准备好的语句  C6 K/ b, g$ D3 v( X5 Y

, S/ Y* U, s/ O" X: ]% F  u" f) P4 F8 }
2.可以用添加______条件的方式对查询返回的数据集进行过滤?* _4 H  T: T: R1 ~4 b5 m) e
% w$ n' H, l0 j; N; A7 r$ G
答案:____________' P: C7 a+ S% ?* v' N% K
$ i2 z# |0 ]9 u4 P* K

: F; ~* T4 g; d5 l3.内关联(inner join)是用来做什么的?0 }4 ?2 R, W& i; i7 x6 A

& ~; T3 N: g5 [4 }  MA.把两个表通过相同字段关联入一张持久的表中
- O0 y' P9 P4 Y+ f( n6 v. }8 ^) LB.创建基于两个表中相同相同行的结果集
+ \2 w* K: i% x2 m4 jC.创建基于一个表中的记录的数据集0 y7 E. S# s( @: U, V& v9 z
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集
8 `1 G3 X- h8 X, i" w' N' U& QE.以上都不对- b5 [3 W' H: U7 a

4 {* v7 Q  @8 ]5 M% e! X; B# Q1 ?% M
4.以下哪个DBMS没有PHP扩展库?% m( f5 U8 |4 Z( h" O$ k2 A
1 B- h9 [- J9 C# {
A.MySQL
6 {) z% q3 U+ _8 X- U- e! F0 yB.IBM DB/2
8 w9 D4 M  e0 j0 h6 }C.PostgreSQL8 a/ m& A$ n8 F: T$ `* J. X5 i. T
D.Microsoft SQL Server
/ }" H6 Q0 V% v, F6 N8 BE.以上都不对0 ?7 T" e( \: n' W+ h0 y  S

1 F! B; g/ m% ^. P- g" r$ S  P. [
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
: i$ X& U! Z8 N6 A) }0 d5 {% f1 p% m
<?php1 _. `. w. l* w8 H9 O5 Y; z( ]! M
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
2 j3 K0 P: n5 G- ~8 p, {; f- a?>/ a9 G! M; m( u3 T/ `" N& i" j
7 |- _& O6 `6 I- k+ r$ Z, A) t
A.MYTABLE表中的记录超过1条
# H0 [4 a. g% P9 k1 k. vB.用户输入的数据需要经过适当的转义和过滤
5 E5 D9 U, Y6 J3 I* UC.调用该函数将产生一个包含了其他记录条数的记录
, I; x* w$ N) `! qD.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
$ C' y4 l* s  \! b& n0 D$ C2 BE.查询语句中应该包含数据库名
8 H1 F* l7 [1 I) p+ Y# g4 |
+ q7 {- o0 ?7 u" `* Q2 P
7 ?) h* S) F2 _! N8 F6.______语句能用来向已存在的表中添加新的记录。
' V1 M0 C3 R+ ]; F# q* b% Y+ U7 H$ H( l* Z5 e1 v+ I0 w* z* S$ u
答案:____________$ F" X3 _7 e# E0 D
: E/ I, R$ \$ o  g9 L
% H  X7 I* Z& F  I( o! e4 I
7.以下哪个说法正确?6 s8 g$ X* C9 Z- `1 j8 ~' y  E% N
0 T+ k; X( P& `8 n' J/ b$ ?
A.使用索引能加快插入数据的速度5 A  d  V  o5 }: a
B.良好的索引策略有助于防止跨站攻击4 ~5 a% `0 a7 R$ [" C
C.应当根据数据库的实际应用按理设计索引
  Q  [, S( ]2 o, H( |D.删除一条记录将导致整个表的索引被破坏
. s. m  g  U& g5 ZE.只有数字记录行需要索引8 n- K' M$ J6 z0 ?& A% L

) z# u7 L, {$ e0 {6 y
, j6 X- J2 ~( i$ ?$ |3 e8.join能否被嵌套?
: J$ r% y7 @' h* g  J3 _; z' L1 ~9 I( ]3 W# m+ C
A.能
' c8 p4 d+ W5 V' w  b. |% W& N6 fB.不能9 d; w  I% M% E- D0 j& p! `

) |5 h- \1 j" D% O8 s: L+ H" w$ \3 T4 t7 k( K$ Q) b
9.考虑如下数据表和查询。如何添加索引能提高查询速度?3 I  n+ t' I  h% [

( B$ ^% z+ z. D! x" Z/ m# m8 xCREATE TABLE MYTABLE ($ N5 }+ E1 y4 v  l  g% }3 d
ID INT,& m+ W  t7 l- T  z' p6 T
NAME VARCHAR (100),+ P1 E0 h/ }+ w8 f4 O5 l
ADDRESS1 VARCHAR (100),
# A) [0 j8 m: gADDRESS2 VARCHAR (100),
, v: [9 I( c8 m2 H6 r( q& E, DZIPCODE VARCHAR (10),' p3 ]3 t# Y2 |6 y9 F; N, y% b
CITY VARCHAR (50),
) ?1 {2 o' T8 u1 U+ v9 m1 ZPROVINCE VARCHAR (2)7 F$ v$ `5 n/ z
)
* I7 E3 w# n3 z4 t$ U) zSELECT ID, VARCHAR
( o3 @; F. s. o9 U, R# ZFROM MYTABLE3 O0 E' \+ S4 J$ p9 x- o
WHERE ID BETWEEN 0 AND 100
- U# l* x+ @9 o+ MORDER BY NAME, ZIPCODE2 P% B" |+ L/ }$ o! G4 Z; z
& u1 X) j2 p. y2 m
A.给ID添加索引
* v/ q, u8 ^, G+ @B.给NAME和ADDRESS1添加索引
. W7 l8 ~: v- V$ M4 S/ aC.给ID添加索引,然后给NAME和ZIPCODE分别添加索引8 A! w7 ?) E% Z9 x% O8 g6 h1 T
D.给ZIPCODE和NAME添加索引& T8 Y1 O2 w+ g
E.给ZIPCODE添加全文检索  _7 h, F, Q) L) y! b

9 a) [0 |! Y3 D
) Y2 J6 F- |7 N# M* {- d8 T10.执行以下SQL语句后将发生什么?4 |" M9 [. @, F

" g3 Q/ u% p. rBEGIN TRANSACTION! _. u) ~- T' E8 I
DELETE FROM MYTABLE WHERE ID=1. P3 T  g* s5 h: z* ]/ K) s
DELETE FROM OTHERTABLE/ o- Q. K- @: q  Z+ t
ROLLBACK TRANSACTION
- g4 }0 I# I9 ]7 m
2 c2 q8 A/ K5 B1 q! r7 HA.OTHERTABLE中的内容将被删除4 N9 X" E; r! j5 g7 p
B.OTHERTABLE和MYTABLE中的内容都会被删除
6 j$ h& _& ~8 D$ Z6 A8 tC.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
5 p& @8 u) Y2 m1 T# i# t& YD.数据库对于执行这个语句的用户以外的起来用户来说,没有变化" q" a* u: j' r4 J' p7 A
E.数据库没用变化
& H/ R/ X6 H* f; @5 m; c  T4 m) g# h

6 Y' g$ L0 ^% I, G5 H11.DESC在这个查询中起什么作用?3 I2 C3 u9 C, p
6 ]. l: H+ E4 i( J* v  p
SELECT *% {6 U. g& b" s
FROM MY_TABLE
, P( L* X9 P) Q: c7 p; y3 OWHERE ID > 0
2 _! s& _. m) \2 o& b3 N8 cORDER BY ID, NAME DESC3 B4 b6 ^9 X& W

8 z9 C% ], N) qA.返回的数据集倒序排列
8 v' ^" u1 {% t/ }6 zB.ID相同的记录按NAME升序排列
; a1 ]6 g  N: JC.ID相同的记录按NAME倒序排列
8 ~: I" Q' P9 U8 q8 S0 ?3 GD.返回的记录先按NAME排序,再安ID排序
/ e4 w* }3 ^0 X, JE.结果集中包含对NAME字段的描述
8 g/ }) q1 c  H9 Q  J, T" h, z. L6 b& Y
0 f6 E) e8 ], h/ `4 S
12.以下哪个不是SQL函数?
! g- n4 _# e/ Y: @- D
% L2 ?1 g1 j$ W: _# P3 n0 z# IA.AVG
: E+ i% J! P* [; t$ F/ zB.SUM
; S+ R% q' {9 gC.MIN# |# g$ {7 K* S" n5 h& B: p
D.MAX+ j7 s, H; B) H# j" R$ c7 F1 b
E.CURRENT_DATE()
+ m0 j4 q# A+ r  ^  p
! [6 J2 X# d! p. {" A4 z* q3 e, }  s4 v( G2 @
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
, R. z- R2 k. Z1 E
4 Z: ^7 _2 h) ?3 J0 MA.该字段必须有索引+ c- N1 I) ^  u$ m8 [4 V& m, `( ^/ ]
B.该字段必须包括在GROUP BY条件中4 `$ F9 M& `# T0 K% n: u% D- @
C.该字段必须包含一个累积值  J0 E8 u3 H+ w
D.该字段必须是主键9 G. x4 J" y$ P& s# [* r# v6 l$ Q
E.该字段必须不能包含NULL值
* |6 c/ G2 D9 B. V7 Y2 o
4 {2 k: @3 T8 k  K$ v! M) V$ r( V2 h5 K+ h
14.以下查询输出什么?
6 {' y' M: l2 T& W
$ t& `, M  p8 Y2 TSELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2/ B, k! g& A3 }8 y
ON TABLE1.ID <> TABLE2.ID
; L) F, L+ w; v% s2 a% s; ~8 k
5 {' K- l5 L) r5 Z! zA.TABLE1和TABLE2不相同的记录! v! k' t, Z+ R1 k
B.两个表中相同的记录/ z/ z- }" b" S
C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数+ ^3 j2 {3 a5 I
D.两表中不同记录的条数/ i# w8 d. L5 J/ n# {+ Q
E.数字2/ G, @( S" A; l% l" l" D& k& W
2 G* x5 H5 O3 r2 i) y- T

2 y& M) H* b6 y0 N# F4 |15.______能保证一组SQL语句不受干扰的运行?9 @+ ^4 e9 B5 Z
/ O9 W0 W3 ?* w: j- j6 J9 v5 t
答案:____________( i4 _  e. O- r: M
$ i0 z, `7 |. p7 I

3 K& P# W# Q% l! b. a$ z1 O
. h; m5 ?$ y" _0 @1 X: z答案速查8 E( w' i+ O( S
1:BC
$ B5 ]& R# z; e( t" \, p7 _2:WHERE
8 s" ~& F; ?- k. K$ W3:B5 B0 `  Q. w  l
4:E  o% @. E6 A) Z  R6 O( V& C
5:BD/ ~8 d* C( a0 ?
6:INSERT. G5 a. I! b4 x, R+ c& P
7:C
, C; O2 ?% r/ b! o6 Y* }, f8:A
' _+ o, J* r7 I9 a9:C
  a) k8 A7 s, S. I* {, i  N10:E; V. t8 `7 ^# t; F3 z- d. s
11:C7 }# X- b. F( W9 i# v# g8 Q. l! @2 Y
12:E
+ b  w: Q! R5 @* Z; Z1 P5 I: @13:BC! E; D/ `  |1 W0 O7 z+ e) s
14:C' p) q5 R2 f- D* g5 l
15:事务# d+ g0 K7 x6 Q! G3 H  I
: _2 l7 u0 u8 T
! Z3 T1 N7 j2 n& g

7 Z: t( Q8 B) Z. N! A* S答案详解
6 G/ d6 j0 P# r' M( k9 X  S4 U0 n0 |  X& M' L
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
1 I2 q, l4 V5 o: c! }1 ]6 J' c5 I' i) a/ i7 I3 `
2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。$ A  z3 D, l! `7 J

# m: k( q& M) H- m3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。% S$ m6 Z3 `% i/ D" f5 m, W
, ?1 [* x$ F" p& h, }) U8 f, |3 N
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
) Q, F' I4 L' q: x9 l2 m, }* Y7 ^
5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。% F1 ?/ l: O( ]  t: T" e7 ^
1 Z, s, |8 d+ ]) K0 ~
6.答案显然是INSERT。, M( J% I6 m; W
8 Q; l% ^. B9 X8 h7 l) ?
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。# G8 N" K. P& i' Q
* j/ m# T3 W/ \- l/ y
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
! l# N; m5 }, H5 ~6 a$ n
/ D& n5 {) a8 L9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
& o0 N4 ?' T9 x& |6 n! h9 g/ r/ k( O% I/ W! q7 W
10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。$ [& B6 n0 |2 k) _& y+ U
7 t; b6 d: m$ e0 h& R6 N4 C
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。; ^; i4 y% f' c+ n6 _* T
& E& N; P% m. y5 _9 l; h0 m7 l
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
, R) [2 G5 J2 J( H% ~) H0 b' v* e- W8 X' H/ A5 @# Q
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
' p7 J8 ?7 U3 k2 {6 M+ R4 Q$ T
' [2 g4 O; {6 I& ^9 e/ U* g' }0 ~1 Z  b14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。
: E1 ]% M6 P( B, Y8 z% _5 @
6 M. }5 L7 A) R  i* `% y& i+ O15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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