Board logo

标题: [Zend权威认证试题讲解]第九章 - PHP与数据库 [打印本页]

作者: admin    时间: 2008-4-17 14:44     标题: [Zend权威认证试题讲解]第九章 - PHP与数据库

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。! @( F* I0 j/ V; Z* b# ~0 B
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
$ n5 b0 ~" \' @! v2 y% ?, I本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。$ B. F6 V" v* f: B3 l/ d7 x' l

3 I, w! m6 `- L1 X* p% c; i
; w/ X9 P" ^6 T1 S; T* |8 V: @问题3 y5 ]5 B2 c6 L/ p) j2 w# s
9 z- G& a& X$ w2 M. |0 \
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)+ g; l( e0 W; {! g) Z/ s6 D

& l: y( i, j0 T2 C1 N/ z5 jSELECT * FROM MY_TABLE, F0 q, T5 g5 I0 y& _- R* _
# B0 P( t- ]0 D% p* `
A.如果可能,用把查询转换成存储例程
' A3 k$ M4 `+ W  J' z, mB.如果程序允许,给查询指定返回记录的范围
2 L5 n& y) ?7 M( H' mC.如果可能,添加where条件: x' ?/ C% L7 T, z5 |/ J. n
D.如果DBMS允许,把查询转换成视图$ P5 S3 |8 [- m! W% e" F% g
E.如果DBMS允许,使用事先准备好的语句
2 T& M& F' g+ H( s0 D6 i1 |! ]
; X& o' O& e: I, ?( T3 d/ T, Q5 u$ i
2.可以用添加______条件的方式对查询返回的数据集进行过滤?
" {- y* n0 K/ z' }% \6 O: a& Y. U; u* b6 V
答案:____________
2 m6 D# ^* k) U. e  c, Q, D7 S3 U- {4 ]: k- |
6 N/ I0 a% C$ Y& M! S
3.内关联(inner join)是用来做什么的?) ?! }8 J; G! H; R* b
% I6 i/ Q$ N4 v& i8 a! J; d5 ~
A.把两个表通过相同字段关联入一张持久的表中8 f. p2 a2 t+ k% V1 r  A8 D. ?
B.创建基于两个表中相同相同行的结果集
9 |; r8 M5 W# T5 D5 bC.创建基于一个表中的记录的数据集( o: w  _2 n- x# x; Y- q- X$ U
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集. r: B+ O# p- k% w: Q
E.以上都不对
9 V# L. L% k! {& i# \1 P
) h9 d% _6 p4 j' ?& a5 I7 P; m& q5 e3 m% \
4.以下哪个DBMS没有PHP扩展库?/ r9 i9 s( Z9 a9 o
/ q8 }% x) C: z( n; X
A.MySQL1 r1 j5 e+ k! X  z
B.IBM DB/2
% S! a& M" L/ ]C.PostgreSQL
0 ^0 _; v! o7 y! \$ ^" q8 FD.Microsoft SQL Server2 s! E/ a3 [( A* d: W2 P
E.以上都不对
) h% y" E" q6 j' |' ~8 _: N! t0 J$ ^+ g# w/ O' E5 `  T
/ @" k" e8 b" R2 K( e$ S* o
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)  g% a5 Y' R0 p, b7 w, D
6 ?  M+ {/ F5 [5 c: L, M  U
<?php4 G5 j, X# F; Z* S
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
7 j, F7 f# X) a, M  ?) \?>
7 I# V8 d. T$ r- [. h! u: i8 L2 X# J
A.MYTABLE表中的记录超过1条+ a, P! k/ H, g7 q7 a. ]% q2 P
B.用户输入的数据需要经过适当的转义和过滤7 c3 f+ u. k* c) r! R2 u- d; m& m
C.调用该函数将产生一个包含了其他记录条数的记录
8 W4 t( e' W, V% c5 iD.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除3 t, ^6 @+ [- d: h$ f8 Z( m7 ^
E.查询语句中应该包含数据库名
1 z) j  H4 h& I6 V
9 `) `7 b8 F& y9 U/ Q
: Z& R1 Y! U% ]5 m6.______语句能用来向已存在的表中添加新的记录。
4 \$ ~3 U9 e, K. g. ?) Y" K' e5 P* ~% v% R8 I
答案:____________# g1 ^6 C- P. u& v* d) e; d. z
+ V) m- q1 W8 S0 f6 C
, ~2 t  R3 K; T; I/ u2 X
7.以下哪个说法正确?. ?5 T& N% v5 a

9 L7 v. Y0 `# V0 V& Y. ^  NA.使用索引能加快插入数据的速度- h/ |% N8 b; ]/ x
B.良好的索引策略有助于防止跨站攻击* l$ {# @$ N4 h' a% a
C.应当根据数据库的实际应用按理设计索引& \; U6 U. F( I2 v8 W( |+ S$ S
D.删除一条记录将导致整个表的索引被破坏
" ~; O3 A/ ?/ _: f9 c( I8 ZE.只有数字记录行需要索引' B# V# X/ j- H- y
) Q. ^6 _( {; ~8 Y( q' y: |
1 o6 p4 U3 Q7 \- E
8.join能否被嵌套?: c9 l$ ?7 ?* a; ?: t7 x0 e) M8 U

- `# o/ j- L$ d1 CA.能
9 n" \0 T- w" }) w8 CB.不能0 Q4 U% ~9 Z5 d5 N

7 Q4 R( V$ N( }
0 ]& J& L7 W+ _$ y: q2 r% h9.考虑如下数据表和查询。如何添加索引能提高查询速度?
# X. a- u2 J& V+ v5 L: p  E, T3 w2 S8 S/ o3 E
CREATE TABLE MYTABLE (
5 ~, R& Z  e* O0 D1 N4 V1 KID INT,9 B1 z& m& p6 X, ]4 ]5 H: C
NAME VARCHAR (100),
) N2 t. C5 T9 r. V8 \+ R- _ADDRESS1 VARCHAR (100),
9 ?2 g9 r4 K: _' ?) Q. |4 @ADDRESS2 VARCHAR (100),
& l; F" n3 B6 O  {3 Y4 J, EZIPCODE VARCHAR (10),! ~6 L# y2 ^3 B& e1 a4 g
CITY VARCHAR (50),& r* R: x8 X% M4 w
PROVINCE VARCHAR (2)
$ g  Y' q, }4 k% V9 n! ^( |, p)
% Z8 K- u+ `0 B- N3 HSELECT ID, VARCHAR
9 ^2 E9 K) B$ `5 yFROM MYTABLE. N3 z7 W& C+ Z8 O
WHERE ID BETWEEN 0 AND 100
/ p3 I, e( h5 d% x2 ]% [ORDER BY NAME, ZIPCODE* m3 }4 Z: P4 ?- _8 c- j6 Y
  z$ P! q. t, v1 ]: Q# H  F% @8 U
A.给ID添加索引
0 b  T* j" T# w- r  E* |B.给NAME和ADDRESS1添加索引
. j) p9 N3 w8 P2 KC.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
% h$ D; R/ H% VD.给ZIPCODE和NAME添加索引
! [+ f, i0 M, u; ]6 x2 |E.给ZIPCODE添加全文检索
5 |* ?) u! G- {: T+ P* n  P8 n% d# O4 \$ d# M& m
9 }& h: F2 i5 T. @
10.执行以下SQL语句后将发生什么?
+ q4 ~& Q$ W! ~( D$ h" ~
' G1 [+ v% w, m: yBEGIN TRANSACTION% r$ `% U- T; K9 Z
DELETE FROM MYTABLE WHERE ID=12 m/ k8 O( z/ V, v
DELETE FROM OTHERTABLE
& [; j' g" w* E! s# \ROLLBACK TRANSACTION
- n. \# [1 ?( A& B. F5 Z2 {4 h
7 }- j, Y' h) J" HA.OTHERTABLE中的内容将被删除
$ w/ x  P) s: \% B/ n1 }3 nB.OTHERTABLE和MYTABLE中的内容都会被删除8 {- u0 x! j7 g7 B
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
3 R5 m8 L8 y/ b- Q- yD.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
! ?  o5 F/ U8 Y! W* m  v2 sE.数据库没用变化% L) h5 N4 l$ T# G& y

% f/ T2 W( M) d, j- Q/ ^, m; I' ]8 p, z# c
11.DESC在这个查询中起什么作用?( ?2 [" ]* N; s: s
' @( }0 F5 y3 Z5 _
SELECT *: W, {- d- y7 e) `3 K$ r% f
FROM MY_TABLE
* c* |/ f2 b* a- z/ k0 XWHERE ID > 0
$ e& ]  J, q' \' g" tORDER BY ID, NAME DESC8 V8 d5 A# \, N7 }. `3 A

7 h8 B$ y$ I. ]$ j3 yA.返回的数据集倒序排列+ L  [9 Y1 `  B2 [1 s( ^
B.ID相同的记录按NAME升序排列7 E, v  u4 r( L+ x, i( n6 ^
C.ID相同的记录按NAME倒序排列
0 ^9 k: t& K5 T( X& m; K3 m. k9 K; d6 tD.返回的记录先按NAME排序,再安ID排序
7 b' t# P# O+ H) F4 BE.结果集中包含对NAME字段的描述/ Q- M3 y, j" M  T. d7 Q) M

% X( D/ Z+ l4 P7 p. _
/ ~' F! X) d* b12.以下哪个不是SQL函数?" ]8 J' C& k. Y. l# c7 t5 Q6 C/ U
' @1 t% a! d/ ], F; ?8 d4 B
A.AVG; c: C6 D9 [* U8 R7 f# P
B.SUM" o$ Z: Z4 D/ Y. m% y% L6 n& o
C.MIN
! h- E, U* T6 n* G: n! \3 u+ ^- BD.MAX
) X$ ^* C1 ?' @% b% S5 d' P4 _9 {/ nE.CURRENT_DATE()6 I3 \; t# }7 \" T! f8 F  P/ v
+ R1 l: h/ o: w$ u* I. M* z3 s* L

6 M' i; e. P  D  O# g! b; k13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?9 B7 P; f" W- [1 g

. v  u7 H! Y  c0 FA.该字段必须有索引& D+ j! Q4 a2 m# _& ?% @& }
B.该字段必须包括在GROUP BY条件中
, Z) z& `$ d* w  jC.该字段必须包含一个累积值
: C) E  `7 ?4 p* T0 }9 K5 sD.该字段必须是主键
. r- u0 X% J4 U1 W! p5 m9 L/ fE.该字段必须不能包含NULL值  v  q$ o: J/ |, [* d6 Z

* `7 x$ C: G/ r/ m+ A, {& u: e% R% H0 v1 U+ ?& ]! W
14.以下查询输出什么?
( d. |" x/ W: l, ^8 o' }" @; h0 A, Y$ `# G: N% o3 {
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2! H3 W0 O* ]# Z. w2 z
ON TABLE1.ID <> TABLE2.ID
7 A+ q  a% z3 d6 I* r; H/ M. [7 y, c
A.TABLE1和TABLE2不相同的记录
& B' H$ h; N2 L/ V& t( E# l. M7 pB.两个表中相同的记录
0 o/ u7 x0 Y1 u9 c; aC.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
' I9 w% {% P' cD.两表中不同记录的条数0 O8 I3 v/ Z( d3 A
E.数字2
% Y: w2 Y; Z# v) q7 n) T$ X- @- \+ k+ c
( [5 c7 Q5 R! A6 H) A/ ^
15.______能保证一组SQL语句不受干扰的运行?
1 K' N6 a# `8 X& L% A, b+ x9 u$ U5 Y) L6 v0 r6 ~5 U
答案:____________# z" Z0 D7 y7 Y. o

# [1 u: [1 _' G, z  S% J' g' W8 ?* p( f% Q: K6 `+ J4 Z7 W" i
- m6 Q) R" F7 g* E8 ?5 q6 Z
答案速查
( \1 x1 o* k  w" U( L, D- G2 K% v1:BC
3 N- W. y7 F7 ~* T3 ^2:WHERE
, u( k/ r9 A7 q$ ~+ u+ `3:B4 D8 r* p! V8 N
4:E8 E9 ~( V* }$ K# |1 _3 H2 ~
5:BD
9 \8 ]8 u) `3 Y) _6:INSERT3 i. k% ]4 F  x& u3 V
7:C* @0 Z2 u% w! B
8:A
7 b# C% _8 U- j0 c; ^! H9:C
" {! c. I$ E& _2 F10:E
9 ~" \7 e. _- Q; ]" a) a' @11:C/ b5 t! r2 ~' E8 N( P& {
12:E
5 E1 O) B; W5 f' J1 p8 w- F/ s' `13:BC
2 w9 e, h/ F8 K. J8 ?2 k14:C
+ s1 ^( h, r. [- A15:事务
- p7 p* o3 L( D( v1 w  h$ t% C# b+ x5 k
' [3 t9 U  O" {2 q" ^
; p) r, R+ q; n  @8 ]! d( R6 ~
答案详解8 p7 K, Z7 w! ?

" @& x+ O/ I- e1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。5 |  [5 S2 `5 ^

* Z6 R2 _, A$ y5 i1 z1 B2 A) R7 Q2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。  h% I0 _5 B, @* P! L& R
! [% B7 a8 ^. y; @  F5 u) ]
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。, H& }$ t) M) \: B$ r$ b& `

" h  l: p% R2 y" Q8 X0 T4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
% A$ f8 y# q' J& d  A6 {& N3 _3 C
5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。5 Y1 |( h; X% O- }0 j

, Z2 {" W8 I+ {- t( i( h/ H" J% N6.答案显然是INSERT。; _; ~" {, W, ^% @5 e) u7 z
3 w# B3 e7 {( r& L' W7 U$ N
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。6 P$ e5 R8 |6 r9 J
1 X# e  ]8 P& }7 o3 @+ ~
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
# `+ X; y7 Q: g5 ?+ G# X& i6 E7 j. ]: w0 I1 B) d
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。1 r0 m7 F* R% d: s0 k

: |% K# H" z$ ~" ]% @10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。( {3 B8 }0 A2 r; y
" P' D! t  B. N8 F# y+ G
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。6 [2 C) Q  E: p1 R4 Y" |2 V

! H/ `8 [. j# E12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。0 D2 E& t# G$ a6 w6 r
6 z1 Q, V0 w- P' V3 ?. s
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
. y$ G# D, Q4 r  b/ W1 Z0 D8 B& |) A: Y% N
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。
' V/ F, n! _  `7 z
6 a9 l0 r* \* ^, A' b4 D& |, p" K15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。




欢迎光临 捌玖网络工作室 (http://89w.org/) Powered by Discuz! 7.2