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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
+ c% Z+ Y7 @. G' u5 [, oPHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
0 X) G4 D+ f; t) B8 e1 S  s; T本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
! K2 K5 \. u! D" I7 i# V' f- f( E
) e7 F* O/ f8 m9 D. |
2 U2 L7 p# U3 z! Z问题9 b4 u  b6 a$ s6 a1 W. o
. @7 v, v( n# i" ^& ?) w, E9 g
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)
- {# h8 X2 |& ?: R) i) |% [
; h9 ^! G! Q% E  @- z2 CSELECT * FROM MY_TABLE* A% g3 N: H* z% R+ b

( n! f! `# w2 R5 `6 FA.如果可能,用把查询转换成存储例程
( m+ B1 H% p/ S& d+ s: s. T$ FB.如果程序允许,给查询指定返回记录的范围
2 [+ I6 w7 X4 mC.如果可能,添加where条件( f- U; R1 M$ i" \
D.如果DBMS允许,把查询转换成视图# ~. L- g$ v1 u1 q- m8 {
E.如果DBMS允许,使用事先准备好的语句
) b- ~8 n: r) ?$ y- ?$ F) i) d! T6 g$ h( `4 m- M& J

6 ^! a/ k- r$ i, O" Z. |2.可以用添加______条件的方式对查询返回的数据集进行过滤?" y4 ~* U$ }) N% v, p* Z5 l

6 x7 j/ W+ {# ~0 T* K答案:____________
* X; \" B- I5 H/ S4 b7 J6 X* J: ?
& b# F! Y1 \: v" F' h+ W: u, {( z/ X8 O
3.内关联(inner join)是用来做什么的?
: F& ]" z% G' z* b
1 ]$ D8 V9 t* b8 iA.把两个表通过相同字段关联入一张持久的表中
1 J# ~; B% {& E, l# S5 T3 \B.创建基于两个表中相同相同行的结果集
- c6 Q* `" W; R* J: g5 BC.创建基于一个表中的记录的数据集  s$ J$ A8 y+ y0 B5 j& I' D' S
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集! z9 S' L8 L% h9 I3 H
E.以上都不对% u9 a! I6 @$ R6 O4 }# }  A

1 E+ Y4 ]7 d, ?+ M& P" G- b# S' e  K7 I$ T
4.以下哪个DBMS没有PHP扩展库?
% [( X. F: S- M% u& d
3 p( v: _' P# q, UA.MySQL
) ?8 z3 t! S+ J8 D5 h$ f0 fB.IBM DB/20 F* H4 |8 F2 b+ ^4 k
C.PostgreSQL  F- p9 k6 f+ A
D.Microsoft SQL Server8 M2 m  V, `3 b. W( [
E.以上都不对
( g7 ^6 s1 G/ ?; K* @9 O
( q& G& C5 W  H8 e0 G# l/ m
% @; o! M% S" a- L0 B+ B9 M* g5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
$ y& B) j% a' ?% f; r$ O' [6 f# X
7 _; |* E& `2 a# t4 Y<?php
% n% |6 g9 m4 r' [4 u$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);' t. \1 N* ^* m7 ^9 R# L
?>/ f7 }3 z* ^+ r# C
% B. u5 e5 ~5 N  D# g* R
A.MYTABLE表中的记录超过1条; E7 c3 @. o( D( O
B.用户输入的数据需要经过适当的转义和过滤
4 q- w" c3 M, \# {) [) ?C.调用该函数将产生一个包含了其他记录条数的记录; S, i2 e: O& Q( S' K+ y% d
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除3 G) p. Z6 n1 m0 G
E.查询语句中应该包含数据库名
5 ^+ m; K) v% ^4 B$ h3 d# J9 F
0 z1 q  d; U. _8 w- [' K' w
5 R# F* z; Y1 v9 Y2 v6.______语句能用来向已存在的表中添加新的记录。
; p$ h; ]# ^& l4 H( }$ Q# @0 v, h! G/ u# w' [. b, |9 M7 T$ g
答案:____________
4 H; W7 H8 p8 ]5 m7 o: H, U" p+ g; |+ Q$ Y, Z" N: M
) O) N  U1 c2 X( t& G0 x. U2 F
7.以下哪个说法正确?' L* B- R% Q. x  ]+ g4 j1 w
  k) Q: G7 @4 c( S/ a& A
A.使用索引能加快插入数据的速度6 `# |9 m4 x# a$ u' k0 D# K. e
B.良好的索引策略有助于防止跨站攻击
1 w1 P. V' G" v# C; N$ B' Z) U# _C.应当根据数据库的实际应用按理设计索引
  R1 I9 }, c6 N, q& i) A0 \9 RD.删除一条记录将导致整个表的索引被破坏) |7 n% e0 O( ]2 V# Q! C
E.只有数字记录行需要索引
! C0 s& p# \$ f% o5 t8 S6 q$ t4 Z5 ?+ ?# A: y  W

9 @5 e9 y0 _) ~$ M8.join能否被嵌套?) K( [6 |8 K4 w

$ U0 Y* G4 d+ l2 H4 uA.能
$ h- k+ Y/ J3 w& i$ j9 a" eB.不能
& m  M+ K6 @) i. A  Y* {# s- v
3 b: _0 X! d/ ~# u
9.考虑如下数据表和查询。如何添加索引能提高查询速度?, y- n* C' z* v& \! A# Q

; @4 `. z' R" T7 H5 WCREATE TABLE MYTABLE (
9 u1 Z* h! S: I/ O& DID INT,
& P7 j- O+ r. W9 |/ F, G8 F5 xNAME VARCHAR (100),  T' i! }; a/ F; ?
ADDRESS1 VARCHAR (100),3 D! }4 _4 o+ K1 W  z
ADDRESS2 VARCHAR (100),
) \! C8 C: E$ p! I% SZIPCODE VARCHAR (10),
5 K3 N! Y5 D4 G$ s  S6 u+ g" ICITY VARCHAR (50),5 ~0 m, m# M9 }! I- d* I2 H
PROVINCE VARCHAR (2)
# e4 b, t+ K; i' G. L)  B+ u7 `3 b( r- d2 j: w
SELECT ID, VARCHAR
! W8 B; g2 t2 s* {" Z- g; u; rFROM MYTABLE; p8 M5 l& L2 }; ?. w/ W
WHERE ID BETWEEN 0 AND 100# f4 E6 p- B7 P+ D0 F& P/ R0 d
ORDER BY NAME, ZIPCODE# H) E8 l9 F, f  [) \4 s9 R4 K$ t1 O

' z+ w6 Y3 P+ {" h# RA.给ID添加索引
9 j0 ~7 L0 |7 a1 y$ F) pB.给NAME和ADDRESS1添加索引
0 a9 F$ B% _' ~0 iC.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
. U+ v9 J2 z1 JD.给ZIPCODE和NAME添加索引" j; x" Z$ K2 h. i; t
E.给ZIPCODE添加全文检索1 z4 A& j) u& M! k$ i: l4 x

% Q: k, ~& m0 e/ P
" ~6 m* J; D+ T; |+ p  [10.执行以下SQL语句后将发生什么?+ j" `# ^0 C0 t( T# q
0 ]3 \; a: ?$ F9 _
BEGIN TRANSACTION
0 q* o  [7 ]- |1 c* ~DELETE FROM MYTABLE WHERE ID=1
9 Q" ?1 }. k1 b; y! rDELETE FROM OTHERTABLE; ^9 L0 I  g4 ^$ V1 k
ROLLBACK TRANSACTION; J/ a' @6 u( K" W4 b# i

) E. k: k2 C+ _9 ?7 _A.OTHERTABLE中的内容将被删除
' F. B0 I2 F) S+ q9 h' I+ PB.OTHERTABLE和MYTABLE中的内容都会被删除7 c3 h8 L/ ~% r5 Y
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
! ?3 q1 K1 N- A  H6 z2 }D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
; Y+ U+ D* w5 D' C* J* GE.数据库没用变化
" }! a% B5 {3 p1 r: g7 I: |( x& I
5 l, W3 o5 n/ I/ S' t* i% {( G, w$ G& N, w  [1 v: L9 S% S
11.DESC在这个查询中起什么作用?
4 g% s7 ^+ o; b7 I
7 B1 [; V5 h( R! f2 }, qSELECT *
) X/ w- @( [1 l. B& |FROM MY_TABLE
; m3 L1 d1 D2 z% ^8 GWHERE ID > 0
% W. y) M+ s; I9 {) vORDER BY ID, NAME DESC
: g) V; f8 g5 {2 M$ n
$ g& B: O* H$ D! RA.返回的数据集倒序排列
! h* q+ y" u/ w; z6 c* C2 nB.ID相同的记录按NAME升序排列  ?* P4 o5 b+ G- W. u
C.ID相同的记录按NAME倒序排列2 K& F, b, e7 v/ P
D.返回的记录先按NAME排序,再安ID排序
+ z; n: b/ A) ~) \% J6 hE.结果集中包含对NAME字段的描述$ y7 ^" }& g5 t  g0 Y1 N, z

: O% R8 J& P/ A& O" z: H1 l, \7 T- W4 R, Z5 L8 q. M
12.以下哪个不是SQL函数?
8 x) _' o$ w- @* B+ I
" d$ J  @2 W. G% n! jA.AVG: O* t3 M" l4 R( {1 e
B.SUM+ l- [: f. |7 V4 q: {
C.MIN! J+ f; b1 e  W2 L
D.MAX
' T! \# M2 W2 E: W3 k* O5 a1 b* R) z7 pE.CURRENT_DATE()
4 k6 n7 \/ q/ C8 R% g  E' C$ p/ g/ u( q1 Q/ U/ z

' g) |2 g. N0 n/ h13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
9 a; _5 A7 q) B3 C$ B1 P
/ L* U8 w8 N8 Y5 d5 z8 ]A.该字段必须有索引
9 u; W; Q' A6 ^B.该字段必须包括在GROUP BY条件中3 ~: d  W0 S, f6 @
C.该字段必须包含一个累积值" r+ {9 r9 H5 f; B
D.该字段必须是主键
/ h6 r0 b# O& P) zE.该字段必须不能包含NULL值, D. p& b+ @' K

1 D# ?$ o3 ~3 f0 d( v6 z+ S9 ^4 X2 @8 v# k: \: W
14.以下查询输出什么?* S. H' Q% A# l9 @' e
2 L( f5 P0 F; i
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2" W6 n& H, |9 m, ^9 ~
ON TABLE1.ID <> TABLE2.ID
9 D: u8 P+ r. D. G: Z1 W6 y! W
: w( R2 u2 M- l& e. j% ^' kA.TABLE1和TABLE2不相同的记录
2 I5 M( l& @- C, U5 iB.两个表中相同的记录$ i. X8 B: R; m$ G! g& v
C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数1 l4 f" j- g; R) Y' o. z
D.两表中不同记录的条数
8 P3 @/ e& n- }8 tE.数字2
' a: e/ ?- M; @- N
/ r0 R2 `# [. J4 b2 ]  f2 K. r
8 v: p+ [+ F4 I# C15.______能保证一组SQL语句不受干扰的运行?
9 o8 \$ O& O( y$ A6 N7 ~  r$ g: A, n3 x* p, y5 K
答案:____________
6 _8 T/ v! |1 T0 E3 ^/ x  ]
5 C4 D& I5 C0 M3 }/ p# Q6 P% _( T/ X# j1 h6 o7 \& ?( l2 Z

7 F6 _- `3 Y  N* S3 D/ Z1 Z答案速查
- q* f# a$ q/ j: ]9 E+ p1:BC
$ g2 d$ c  g1 V$ G+ h2 p2:WHERE
' u1 I: W; v/ ~8 S/ H/ B3:B
! v6 |: q3 ^7 }9 G: b3 i; p. d4:E, v8 T2 b- u# H& D& k8 Q8 N- p& D. b
5:BD* f( {+ [6 g, y1 w0 Y; Z$ a
6:INSERT
) x5 S' c1 ?5 m! \# [6 O; k7:C
3 P5 E5 U3 D& b8:A# B( R7 E- ?  I+ b
9:C
2 M* V% Z& ^0 |! u/ q& F. B" J10:E+ X, _' A! X6 d, L8 _' b4 `
11:C
- U5 Z) u8 Z7 A12:E
) }9 s3 h' Z& v. _  \9 H8 i2 @13:BC
# {! o$ E: s. m0 Y6 b14:C6 b; b$ [& I$ E2 W/ `, B
15:事务  S5 w# }7 F; x8 u. [6 I/ w

& m1 ?2 ^" ~: }- t- }- M- T2 {7 X0 G" k. ]/ U$ R$ s( U
' w. P" C! Z! h
答案详解% ]9 S* X$ F; J1 F0 S1 R* B
" u, L: y( e+ @3 \7 o
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
9 x; V( i0 u$ J$ |% {
9 L! v; P# I, j4 d. ]1 e- j; R2 H* k2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
7 v2 }9 _4 l2 Z0 i6 A, R& q" S  g. S, `+ w0 S7 t( N
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。& ]5 I" q& ]! V
4 \+ X" z$ e& f; e
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
, K9 f; J; ]% b' l- j# x2 }1 D4 r$ H. v( o& o
5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。! n# m9 o& [6 ]

% ]; Y, n+ U9 Y! i6.答案显然是INSERT。: q7 k6 k8 ~6 d' i0 [! A' D5 N/ B
; l3 v6 P1 g' [% M7 u4 V
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。7 d9 F( M" W( x$ m/ A

5 V! Q# B; e$ M8 k8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
: k3 y) L) L. U8 N
' w; {- O5 y1 I+ a1 r9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。0 k; z% P+ K% Z6 k" b! r) o: T

3 z: V! h/ f. G10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。' Z' K1 R; R; Y% o

' \  D$ t" H/ Z7 b( X- G6 v11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
! N. c7 f8 I# S/ k
, P6 X; c$ B4 d" |' D* F" g12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。( ^" i; V% p$ v; g8 l4 d

% ~: Y1 y$ E' A6 i13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
5 D3 o! s. V! ]4 v$ x4 L, ?
6 T. x% d2 G# {$ ~: X14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。2 E5 T' U2 g$ z1 s8 F  H$ J8 R3 O

$ y9 L! o$ `' d/ y1 l- ^15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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