  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14221
- 金币
- 2401
- 威望
- 1647
- 贡献
- 1349
|
[Zend权威认证试题讲解]第九章 - PHP与数据库
如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
3 I' W$ z$ u0 e2 [# }+ }) J# zPHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
" \5 `5 R9 b1 R G" p本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
6 D7 g( ^. l3 f( M5 Q7 w
1 z: g( |8 k5 Z7 ~* ?4 z% Z, c+ Q; O( u
问题5 B/ `) p+ N+ M& J+ p- A
# n7 |7 d) t8 Y5 G' P
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)' K* N7 r T; w2 ?2 z! M
1 t: S3 F/ F8 X) a2 w( P; oSELECT * FROM MY_TABLE
7 C4 R7 @* ^/ ~/ H- r* e9 n0 g- H9 P1 L2 e' T; C2 p1 b6 a
A.如果可能,用把查询转换成存储例程9 w/ E" O, t6 \+ v' A& [
B.如果程序允许,给查询指定返回记录的范围: b% L" W% L! J D
C.如果可能,添加where条件
7 d! @3 Z7 I% H* O3 k+ r2 M1 FD.如果DBMS允许,把查询转换成视图
3 |# m7 N" w. I! Q- q) M2 kE.如果DBMS允许,使用事先准备好的语句
1 {. J& e# ~0 a. I9 L% L. l
3 `, A+ v/ C" l2 u, v- ]/ _
. o" Y9 Q' q1 }5 w1 a/ e1 ^: z2.可以用添加______条件的方式对查询返回的数据集进行过滤?
- n0 _1 W, A" a/ N2 A
! G, B) F! M+ F* Z9 O答案:____________
2 S* [. `% o% P) |: |: N, a( I& |3 n. Q/ f ^! d1 m0 O+ u
( f: o' U9 P# K- r! q3.内关联(inner join)是用来做什么的?2 `% |7 H# u3 n$ o6 q0 P, I7 f
* a$ J) w7 b4 N% [: u# }! T
A.把两个表通过相同字段关联入一张持久的表中# u3 h. W4 x- a2 j' K: i( @
B.创建基于两个表中相同相同行的结果集# a- o3 `0 O5 y
C.创建基于一个表中的记录的数据集
1 @5 G- [. J! F) r& D2 o: k8 a# }* \D.创建一个包含两个表中相同记录和一个表中全部记录的结果集
! [+ L) m5 w# t1 J x7 IE.以上都不对% H; L- u) A4 y E$ a7 A
! J T5 z6 Y& U) b5 c
9 m( ~4 j! L% n7 c
4.以下哪个DBMS没有PHP扩展库?( U& D8 b/ K7 M r0 V; M b# H7 t
0 W6 S7 \+ k% }1 Z$ G4 I5 v+ v; _
A.MySQL; J, }' k) x( b
B.IBM DB/23 g) w0 c: l% j h
C.PostgreSQL
9 | A0 H) ?% g8 X, I2 }- A1 K, nD.Microsoft SQL Server
8 [' j% n+ A6 a% m8 YE.以上都不对& M9 V& U; i/ A. h* Q) A, p! y
/ T) W+ e4 T) `7 }! g9 w: b
8 ]/ Z3 `3 g: l5 X5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)& M8 s+ l2 ?# h
8 [5 j1 X# Q7 |/ h$ u<?php) s: W" a' W. i" i8 |
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);' A( B. \6 c( G4 T4 K
?>
9 I: Y ?5 B% C" h; V3 \" ^4 k% V
2 {1 a3 y, y) a" F. Q. U8 kA.MYTABLE表中的记录超过1条! j5 ~% h1 H# |* s8 N7 ?4 E8 c
B.用户输入的数据需要经过适当的转义和过滤9 a3 f4 G1 n) @; j
C.调用该函数将产生一个包含了其他记录条数的记录3 m( i6 h8 q0 v3 X3 Z5 j
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除( \, |8 |# J4 J% w
E.查询语句中应该包含数据库名
, K: g: w% B/ k' s% p8 z8 j" X7 U- [8 Z$ ]0 D
$ s1 n; `1 A% s+ \9 |; X" H
6.______语句能用来向已存在的表中添加新的记录。
! j# J+ i \' x5 ]
" z9 e1 f3 [8 E5 B+ s答案:____________4 Z8 ^2 ~" _2 ^8 U6 K
' F- }5 z3 Q( X' _
" G9 ?' t+ l! K8 I
7.以下哪个说法正确?. [3 T8 }6 N, F
& V5 l/ A8 n/ k, vA.使用索引能加快插入数据的速度* T5 F, z: f; H: A/ Y; H. n
B.良好的索引策略有助于防止跨站攻击
. l8 M6 H# E! y, [C.应当根据数据库的实际应用按理设计索引
4 q4 A) d1 x! p9 TD.删除一条记录将导致整个表的索引被破坏& ^. G7 ^7 ?1 M
E.只有数字记录行需要索引5 @1 N+ F3 }8 g, S& J5 o
" r2 p/ J( W" g9 h
9 }5 D1 n% s$ w9 b8 M$ n( M! ~8.join能否被嵌套?
/ h6 E3 \& [) N4 \2 c q6 O2 a0 e) E% T l; p* J/ `4 S6 d; J
A.能7 a1 I. }6 z7 y5 m: X; [
B.不能
: U/ ]3 i+ c) Y
7 V4 [/ ]. w! O
: F: }' y) z" i1 U9.考虑如下数据表和查询。如何添加索引能提高查询速度?
- C l8 H' k) J: S. K! t: v. y1 }; A _, e) Y
CREATE TABLE MYTABLE (
8 _3 p& T. S( g! c3 zID INT,# Y# q/ m+ W4 }" ?) |+ B8 c, T* u
NAME VARCHAR (100),
+ q" X- D& N/ w( k9 }ADDRESS1 VARCHAR (100),
. ^/ |8 _" `/ I* m2 m' s7 fADDRESS2 VARCHAR (100),
- ~# y" a/ h2 K% R" SZIPCODE VARCHAR (10),% D" _* g, {- s: O& c; f
CITY VARCHAR (50),
; c1 k" d9 ] A' n$ oPROVINCE VARCHAR (2)
+ K+ J6 |5 L# y; e)
& n6 N, d1 Q4 zSELECT ID, VARCHAR
- |" u7 F' t0 V1 }* A/ F: m' JFROM MYTABLE* H1 W& h1 [1 j2 a) x% r+ S4 I
WHERE ID BETWEEN 0 AND 100
7 C2 H# ?" T# XORDER BY NAME, ZIPCODE4 Q3 L, v3 }& {' o- O
% @/ \$ u9 W5 r& Z. I9 Q8 qA.给ID添加索引& ]( \6 j4 J4 c
B.给NAME和ADDRESS1添加索引5 e( g: h5 W( O2 [) x4 m+ b
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
; J5 X: n% Q" ?3 b& S! T* LD.给ZIPCODE和NAME添加索引% x( _: E) |) B$ l+ A5 N9 s
E.给ZIPCODE添加全文检索
2 I7 b: I8 x! M; t' Y8 O5 f
- |, ]6 E2 f- {+ s+ C% v
+ i0 x, k" k Y7 Q10.执行以下SQL语句后将发生什么?4 I, k3 M9 G7 D7 F& j M
9 E$ @; V: L' T% ]* e; L, nBEGIN TRANSACTION% n$ E0 d. y) q# X, A8 l3 p
DELETE FROM MYTABLE WHERE ID=19 p9 \1 W) { H9 A9 t3 a# G
DELETE FROM OTHERTABLE/ {2 g) N" `7 l$ t
ROLLBACK TRANSACTION
5 I2 p! d: m( a8 l/ C
# u* f' o6 N9 x% h& U; M: m" Z9 aA.OTHERTABLE中的内容将被删除 V1 S5 @! t+ T
B.OTHERTABLE和MYTABLE中的内容都会被删除0 a( I4 I: U; B* U
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除. `9 |' j1 p4 ~) B3 D
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化( f+ A! F" w$ h1 Z( ^' f) @( k/ G
E.数据库没用变化
, J) e3 I( ?. m* ^! s
1 j$ a! ]7 j8 B' l7 i9 y( `* K* F+ A' h( X5 M
11.DESC在这个查询中起什么作用?
# B# r; `1 Y. W! Y7 \6 z9 [ b
. ?( E3 B; m. H; m mSELECT *
W% _% x9 C" VFROM MY_TABLE- s! g9 I6 F# W# F" ^ Z. a
WHERE ID > 0) F+ X4 T0 j/ b% n2 n
ORDER BY ID, NAME DESC
, C7 h! O# H! G* Y- U# M7 h/ v0 U% J
& L5 A$ l" |: M9 N5 tA.返回的数据集倒序排列2 o' w. f! d9 r
B.ID相同的记录按NAME升序排列
0 v0 O6 [+ {1 k$ ]3 U& z! QC.ID相同的记录按NAME倒序排列! N2 s* K a2 T6 r
D.返回的记录先按NAME排序,再安ID排序% N0 t2 i( t- j1 G5 a1 R0 e4 T
E.结果集中包含对NAME字段的描述
4 S9 G( m6 n3 J: v0 y7 A8 |# C. Y) \- }6 q! P2 M
8 {; H9 X0 H/ O- W( c4 G, ~9 b
12.以下哪个不是SQL函数?
6 y. f$ q8 o) \. V+ @& @% k' S( K0 B" ~
A.AVG
5 _, v7 _7 X) B4 b0 G2 UB.SUM
- ^6 l5 _6 q- [; T' C; RC.MIN
) X& Q- ^ |# U0 B& X8 }. v, `+ ~D.MAX
% T- j/ F) q, j% _4 h+ rE.CURRENT_DATE()$ U. m7 [; l# y
" e I: a k% Y
6 k$ o# a2 x# [# i: B& R+ T" Y7 q ]13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
0 }# v8 d6 I3 C; o6 o7 j/ m' ]' |5 G" L* E- K; N; k
A.该字段必须有索引
, M/ P/ Q M6 m$ {B.该字段必须包括在GROUP BY条件中+ Z. I3 z; L0 T; K0 X" F
C.该字段必须包含一个累积值
$ s2 p9 j2 ^& Y- Y& Q4 [D.该字段必须是主键9 O4 f& f8 G( w
E.该字段必须不能包含NULL值& c9 b& {7 [, F% I' L; M
+ |) Z3 F. t3 \/ N
7 U- U7 x2 n7 `) n8 o4 D. `. o- X
14.以下查询输出什么?
M6 o: l0 g F7 W& p- m' z& J/ A; [3 c" u4 C- `, ?) O( v3 V% T
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
6 G$ O+ i. P. N+ W1 \ON TABLE1.ID <> TABLE2.ID
: F2 N8 G; F- i& m: Y
' ^9 ~4 v$ G% Y+ |, bA.TABLE1和TABLE2不相同的记录- s2 _% R9 \9 ]/ y0 S* v1 d
B.两个表中相同的记录, v3 \# X2 ?* Z( R+ m _% w
C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数2 M3 ~% ^ O) Y' X A! ]5 s/ z
D.两表中不同记录的条数* M* G! B+ q) Y$ J
E.数字2
7 i6 ?$ G7 ?. _( A$ `3 u; J% x8 ], Q1 {3 f6 p! s8 P
* `! D- x6 X7 H; K3 F9 k9 U15.______能保证一组SQL语句不受干扰的运行?) |' L4 i- Y4 D& E' q
6 T! C" L. l: _) t5 O+ p" y n, {答案:____________
# g/ p0 M. }8 t* q. q
8 ?' u( C; z8 t, s! b n. K9 O( R. E. F6 {/ O/ u4 y
7 F. z) a: c1 I8 G8 E3 k答案速查 D, x4 q. @) o8 l8 v
1:BC. b9 z/ G `) n5 D
2:WHERE* z0 w# l0 C9 w5 |! t
3:B9 z" X* S- S* ]' f B s+ M
4:E. z* F: s/ L6 L; y% O% U
5:BD
3 P1 N% w* Q" X) ]: {* D2 S" R9 a! H6:INSERT% i; r U2 ^+ l$ U% [+ r
7:C
( s- g' g2 I9 z! S* W# w t9 b8:A; r1 w; {$ @3 v9 r- S
9:C
) Z' _2 s {1 ^6 C9 C! ^% V10:E
* T, i1 l8 l% r- y5 D( x11:C& o3 Z/ q$ Y1 h9 y
12:E
. x6 h5 Z. l$ h4 D" \13:BC$ E1 Q; x+ E. p9 C4 W. O2 \& v
14:C
- }; N, ~2 M9 u! q W# c* d15:事务# Y. d% c8 S$ A
9 h- T9 V- V, n, f9 Q
7 L0 k! b; l' r# f2 ^" Q4 X5 z2 q3 R3 g
答案详解/ L# x0 k7 h, z" w$ Z
# h$ X/ C4 ^. \' E! K8 t, r! D/ S1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。* {+ J8 m% O, ] P0 V* E/ {
8 T; r. a. i6 _. `2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
, R- I* J- u" p
; [8 P% ]: x7 r* m5 ]' u9 q( x9 [3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。
8 j/ h9 [; W1 N/ m+ ?4 ~( ]0 q$ J7 p! K, l5 R
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
) V4 J3 j( C" I6 m( H& r+ Z' I
* ] R0 h8 r2 M j G4 [5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。9 a9 e8 Y/ H; {+ f. S: C
0 |. D7 y; D. R8 v6 i7 T" Z# \ s
6.答案显然是INSERT。
6 C) M) C$ w3 n, t- o4 h
+ U2 H8 a0 N+ K7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
. @8 S( R( i2 n( i# Q7 p* i, q! {) L' L5 l
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。+ L7 j* w* L6 r( m: j
7 u9 r9 ~7 c& t# K/ D4 w6 _
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
! U4 G$ \9 J+ ?0 A0 ^+ `4 ]* M
7 C- H5 l: S- c3 g8 t7 a10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
0 Q) v' F) q( l' C" }) |. T
7 q* C* k; q; T" L( p11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。8 o9 K+ B9 R% F) w# y/ l
# ^0 r2 U' }# P1 {
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。% S! o: z1 `% \: B" D: x
: O" S j9 X9 h. f# G
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
2 _6 T) g; I! {0 A
4 H# t; o L4 h2 r4 f14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。
/ `: Q7 ^- Q0 o' E5 n# u3 ?+ g& B8 b' i, g$ J; x7 g9 J+ a0 k
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。 |
|