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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
( g7 m2 ^1 m$ ?3 |PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。% J; f6 D$ D6 N
本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
, X- R$ O% i9 s  H( V0 e* R2 W
4 y7 A/ m3 n+ ^  M
& ]8 m( ~; D. m3 G( {* w$ L问题2 f; R) d4 `+ @% _8 r) B4 K
) J/ K8 c- I& s+ L
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)
' k# R/ E' ~4 p) d7 r" r' K$ S; T7 [, E* q+ S8 I5 k; V: T
SELECT * FROM MY_TABLE
) \9 O% G  k1 V9 q1 B* R6 e. l7 ]7 S, ]
6 f) n5 f$ @5 @( }5 v2 g2 fA.如果可能,用把查询转换成存储例程
$ `& _3 }8 I9 J9 Q: ~# t7 cB.如果程序允许,给查询指定返回记录的范围5 R& x* u/ {0 O' o8 ~
C.如果可能,添加where条件7 @# W. S1 Q- Y' H/ b, l& X
D.如果DBMS允许,把查询转换成视图
- g4 ]2 P" b) @; Z# IE.如果DBMS允许,使用事先准备好的语句  G- D5 v+ I! @$ A$ [3 f

! U. l+ c- H8 T% w
9 O3 R. N+ g/ @; u$ v1 |- ]2.可以用添加______条件的方式对查询返回的数据集进行过滤?. `# l2 Z5 _2 t

3 @) K1 Q5 h6 T6 f1 l" G答案:____________! n; P# Q1 G( {$ Z0 H8 G
6 O" G( [( X. t9 [- [
  z# `5 a, u. ~1 G* E: R
3.内关联(inner join)是用来做什么的?
0 B5 p  p6 N7 \2 N' [
* _" v, Y4 Q1 D/ T* gA.把两个表通过相同字段关联入一张持久的表中
+ Q8 ~9 X% J- }B.创建基于两个表中相同相同行的结果集
7 s4 t  f, R1 b" r5 JC.创建基于一个表中的记录的数据集
8 P6 E. M7 A& }' xD.创建一个包含两个表中相同记录和一个表中全部记录的结果集
$ A: Q5 @0 q& S, w: R; Q0 fE.以上都不对
. u7 F" X0 m. H* b* J3 M! j: N* ^4 D( K( o* n% _% D
0 S# i% T' s  v8 s
4.以下哪个DBMS没有PHP扩展库?, [5 r+ h5 E1 Z

4 @# k) S, V+ L5 F7 o5 F- \5 u' pA.MySQL
8 G: `& o: K1 s6 y4 _3 }/ iB.IBM DB/2
9 T: r! b) ^; S  P% D2 }( OC.PostgreSQL
( u1 N$ d7 T% T- O, P' mD.Microsoft SQL Server
9 a: W7 H$ ~% l; q: |4 K4 X( rE.以上都不对
; r* o4 n( U8 m! G
$ f3 H4 {7 K# m; c. {: {1 K. h$ B, |
4 w4 S) |6 \- G- d7 F# r5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)8 S3 s2 z! R5 S5 d3 {! k  R2 c
5 M/ k9 u( ?, [  ?
<?php4 e+ }- Q8 N5 l+ z, N4 g) N
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);) g! f* T2 l, l2 r( \: n" f$ R
?>" f/ t' J7 s: v2 }
3 D+ q- I/ y+ K9 f
A.MYTABLE表中的记录超过1条
0 B/ j  k& u6 \) F( k7 F' l6 c$ EB.用户输入的数据需要经过适当的转义和过滤
2 O& O' F6 d& c+ D5 G8 C. WC.调用该函数将产生一个包含了其他记录条数的记录+ w5 j6 m! K" q- H+ d" U
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除# e7 H( K  f' e4 w7 i
E.查询语句中应该包含数据库名1 P% r# {6 X8 i5 x& ?, @% A* g- E
6 N' g, E: t' c1 I! x' l
8 h+ u% Q7 u6 R  p4 m. j
6.______语句能用来向已存在的表中添加新的记录。
+ i( Y! C7 R3 `6 p; T2 ~) U4 j$ }9 Z' \  G! G7 G2 F* y
答案:____________
1 ^, Q' D& i; O- ?  r& U* Z" I* a
( B0 K- s. f! Q8 ]2 u- j( d4 J  L2 `" A
7.以下哪个说法正确?3 C7 C3 E0 v  k& d# l! Q
4 F+ k' {. R, }3 D  Y& x
A.使用索引能加快插入数据的速度: N$ ~$ p$ o( b) ^
B.良好的索引策略有助于防止跨站攻击- A9 m+ ^. _2 C; q; i5 o! ], E
C.应当根据数据库的实际应用按理设计索引
4 b9 t& ~7 m5 x% Y3 uD.删除一条记录将导致整个表的索引被破坏/ \! x! D. v, _5 `( M) r
E.只有数字记录行需要索引
# S, m5 x# G: D& p. s
( U! s  V- v" r3 t
0 p. j' P9 H9 n! l& m8 e; R/ ^8 l8.join能否被嵌套?) I3 @# P* X* a5 @* j' h

. `( b9 U+ {2 `A.能- @" z# V2 N1 M+ B9 R3 }/ E
B.不能  ~/ H8 y2 S! {% }& z0 c- |

: q# ~2 a! r# _# f" q2 w* P9 I; B2 @" \* Y
9.考虑如下数据表和查询。如何添加索引能提高查询速度?- I+ P5 g# y# x  }: s/ f, C
1 K7 y  v$ f4 t0 l
CREATE TABLE MYTABLE (5 N3 d  {- i0 W
ID INT,
  H' x. Q4 M" \9 ]5 O& a! vNAME VARCHAR (100)," r0 W% j$ I  r( Y
ADDRESS1 VARCHAR (100),
' n5 ]1 D: D, X# J: c$ HADDRESS2 VARCHAR (100),5 m; c- |( O( U& r( b; [! Z) H. \, I
ZIPCODE VARCHAR (10),# G+ d: E/ j, |' ~& \: I$ _
CITY VARCHAR (50),
$ b4 x: h, Z) Z6 V) NPROVINCE VARCHAR (2)
& }6 L7 L3 P) ^& I: o7 E0 s( ?6 S)
4 ]5 E  }* i" g6 {( k0 Q) s- vSELECT ID, VARCHAR2 ]% T8 @/ T( u$ O. q" B( x0 O
FROM MYTABLE! E, u  i( s- W; n
WHERE ID BETWEEN 0 AND 1006 Q- t8 L" q3 B% d$ e
ORDER BY NAME, ZIPCODE/ s: B+ s  q2 T" |

3 k, k( W4 V  p" E% C+ T1 LA.给ID添加索引
; o" [& v/ ~# X- g$ c5 @; Q4 EB.给NAME和ADDRESS1添加索引
. Z7 O; Y# L, T1 c0 A2 e7 PC.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
) k+ X3 C7 P) PD.给ZIPCODE和NAME添加索引7 A, ~3 x9 y" c' N5 g6 `
E.给ZIPCODE添加全文检索5 J3 X% F) e  y7 r/ S$ d' `, \: V7 g% T! G

( i' `6 g( n- z% @5 T# U
7 ?8 `+ O3 ^5 y' M10.执行以下SQL语句后将发生什么?
  c0 @& C8 O: `' H9 w  b
5 M+ K1 ^2 ^) _- X  YBEGIN TRANSACTION! D0 C& I6 p1 L# k! d
DELETE FROM MYTABLE WHERE ID=1
; V& `, M# ?, I" m9 Z4 i" oDELETE FROM OTHERTABLE/ W4 i: o! d; g$ ~) i  S" t3 h
ROLLBACK TRANSACTION, X  f" @, ^. S4 s) p$ Z, c
# ^7 [5 _2 O2 I/ j
A.OTHERTABLE中的内容将被删除
7 R3 E& f4 j6 H: g' d* w7 @B.OTHERTABLE和MYTABLE中的内容都会被删除4 z, {2 }- H; m* {/ K
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除. v9 e) \1 U! d& b- A0 Q; ~4 _
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化; [4 O+ S4 ?* Z, Q
E.数据库没用变化3 I# f" m3 g/ K$ y

. q7 T2 {" C- N, u& N( |, c; O- ]1 M' ]0 v
11.DESC在这个查询中起什么作用?. E7 O  L- K7 x: `9 B
7 c/ R' \) _4 p  {6 v
SELECT *5 h* u2 v7 y8 Y
FROM MY_TABLE: d* Q+ ]; b- j1 t; C
WHERE ID > 0
! P9 r8 L; H" }8 z0 AORDER BY ID, NAME DESC
9 ^" o4 B  N2 _0 _  h! u
) ]0 ?0 O9 d4 b3 d3 F+ lA.返回的数据集倒序排列" T1 W, Z, h4 T0 v' b
B.ID相同的记录按NAME升序排列
  w  h) I% t5 P4 h' lC.ID相同的记录按NAME倒序排列
8 q% [3 N7 f! A) ]) K# ]D.返回的记录先按NAME排序,再安ID排序! ^4 J6 @1 ^5 \; D
E.结果集中包含对NAME字段的描述5 C% j) W# C. g5 a* b- T

4 z8 Y  E8 k+ Q7 W- E& v; P6 J0 e; p  i0 `1 o% e
12.以下哪个不是SQL函数?
% x) z5 O4 F1 c0 c- R4 O. F( |5 {3 x6 a+ e  _' y
A.AVG
3 N, U6 s% ?0 \0 y0 ^B.SUM( v" @, ]8 U8 C6 h, @& b; k  w
C.MIN. M1 K7 q4 f3 D( B, Q9 q: Y
D.MAX& n' K0 n: D  S% @( Q3 Z0 t
E.CURRENT_DATE()
* H  a" [/ y1 k  n7 m) t, h) e2 G" c  a  J2 _6 ^
. r8 ^  B( {8 m5 o: C, [  Q
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?( Y8 E( I; b9 X( n) B
9 k0 k5 u" j0 C- S& b1 u
A.该字段必须有索引
" P: X  D: |. _/ _# Q. UB.该字段必须包括在GROUP BY条件中' p8 }- S8 ]% v& `8 X4 j
C.该字段必须包含一个累积值/ c- B" O, P5 [- K5 D1 Y5 D- y) g
D.该字段必须是主键
6 u( L- H$ m! L* ^E.该字段必须不能包含NULL值
6 P% ?! a: c1 v5 A( d
8 U. T% L; R9 G5 T. w# \
. L  [4 d/ d  O" `- Y& Y8 T14.以下查询输出什么?4 }4 S, q/ s3 j

( ?$ N* r7 j  m0 H% d  ZSELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
0 Z5 a: p, ?! H, B5 S/ OON TABLE1.ID <> TABLE2.ID3 z( l( n+ X; w) G
0 `/ J( k6 [4 C- _. d1 t6 Y9 w1 m% u
A.TABLE1和TABLE2不相同的记录
$ y* ?% Z! a" ^- H( yB.两个表中相同的记录
1 i7 x4 L% L$ v3 A3 ]C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数9 {& t& f, J: ?5 D# a
D.两表中不同记录的条数
- U. m9 E/ j3 u+ I! hE.数字2
2 c" j9 d* C; `7 X1 J7 M- A
, i4 l6 z: n1 ]
) R. t4 m$ Z4 j. I* U- Q+ k! k15.______能保证一组SQL语句不受干扰的运行?
  ~, |; D9 I: v) ]7 k5 S
8 W3 U& Y9 w5 F) M/ z7 E7 w0 `! S0 U答案:____________
8 A0 Z; q9 t" M6 q
. S% F7 K1 i: H7 a: C0 E+ b5 T  _" ^. F' ]  V1 f: F; f: M) m1 X1 ~
+ D- q* s0 a% a3 W' E
答案速查
- O! t% @7 m  V& \' |9 Z( h1:BC2 b- [. L4 [  e7 A5 M
2:WHERE
) U6 c8 s+ ~) W% p3 M) _" w% z3:B: h( m, i  l0 u# x; m; J4 W. g- g
4:E
4 E% P; W0 \6 I5 i5:BD
  f" o; y$ A# k9 K6:INSERT
7 H% @; d& E- }5 l. ]& \& h7:C
* t& R2 W2 X! c; I. @5 w5 i8:A
5 g' t1 H1 u  S, H8 q+ W; l9:C; _3 _/ {  M4 ^) B7 }
10:E
- C: |; Z/ `" M4 s8 G11:C9 M: p7 c' C8 m0 p! E% c# L
12:E; D# w5 I. [7 b% N7 w
13:BC1 \# N2 w0 W3 \0 X
14:C
8 s; i) e0 P& O4 Q/ }; P% A15:事务
$ k, G5 V! ^7 [( m, \7 _! ~* m$ r9 p- q  d
0 s, i+ x4 M7 W* j) L
, I9 o0 s- B# ?  O
答案详解3 T  c, U4 s# \4 y/ j; A2 X

3 m7 C. J3 ^$ X) |) D1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
6 ?1 E8 n1 ]. d
* U8 l  q1 x# Z" m* F$ N5 r& c3 c2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。) G4 C& f* T9 |0 w

9 \+ d+ g8 _" y7 t9 R* e3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。" }; c/ Y# @+ y/ s( L, F  @  \
/ u9 v: g  b) r' ?
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。& S$ p7 @0 O# \3 I$ m; P
% V1 c% `( J6 G- g2 a" c6 R
5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。
1 U3 L8 e7 S2 m1 {' F
1 h" J& F7 O4 S4 o/ z6.答案显然是INSERT。8 B" K% i: T3 u% _5 P

4 {+ K+ q# s  \) P" t7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
7 x' U% ?% M; a2 y# d2 p  L- q) o- ]* A8 r5 {& j1 l' B
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
, S; v9 r3 _7 {, |0 f3 ^+ N* h! h2 y8 ~6 R1 M9 z
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。. _4 K. Q+ i' }  R: L2 ~
4 e" Y( V% w% @' ]
10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
. U& t, @) O. Y# X, `' G, k3 ]4 t# S
7 A9 d8 W! X" ]# y8 }6 U11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。- I' E% H( P8 `$ o
6 k2 _' I6 b& }' v9 E
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。* i7 n8 O9 K# ?, p' D; b
' ]. e" y9 C5 n' D0 [
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。+ q4 |1 D' _3 I3 Z. {* Y; B
) Y! D  I. M% x  s: A! t- B% r
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。8 V, O. V6 z0 ]: k: i8 v+ r3 G

/ i9 G! |9 x7 E' u4 u15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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