Board logo

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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
7 f! q. B+ H- R& i' R) }& P0 nPHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
& Q; X; A. \8 [4 ^5 I本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
, q9 ]& `9 O2 x2 P( w) o- F, t: Z6 v6 ]
% d/ _* Y# I9 e- J, j& g) w+ ?
$ h  F) j/ r, e问题
. L5 M/ Y9 ^3 x0 ?/ Q
8 o  S3 B8 a7 Y8 F5 a8 |' m; R% k9 Y, B* e1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)
! l5 D4 A% ]* i( d( s1 ~+ S% H
, x5 u: b5 [# e- c8 h, wSELECT * FROM MY_TABLE+ H% z5 G; S4 B; ~3 }. h. P

' K1 [' p% i6 uA.如果可能,用把查询转换成存储例程4 Y. _3 }3 Q3 p
B.如果程序允许,给查询指定返回记录的范围
1 y7 H6 k! @$ z( |) O, w( H3 KC.如果可能,添加where条件, g& O+ u( B( J& R  S
D.如果DBMS允许,把查询转换成视图* X/ d1 k( y3 ^- S
E.如果DBMS允许,使用事先准备好的语句8 N" a/ D$ @; v" @. V

, s0 F0 u* Z' b/ t% t7 n% u0 _
" [+ V  Z! D- g  P( s, @2.可以用添加______条件的方式对查询返回的数据集进行过滤?5 X; f$ N7 j1 A0 I6 d; e+ b
$ ~. `1 p" q- o
答案:____________
. M9 X; o- |# I0 `; S2 B' v; ^  v

; W3 E4 a+ E9 d: J3.内关联(inner join)是用来做什么的?7 ^$ s: g  q2 S! O$ ~
6 ?' d0 z% r) C7 \2 L
A.把两个表通过相同字段关联入一张持久的表中% J% G+ }4 A4 ^( g$ Y3 B( c5 n$ r
B.创建基于两个表中相同相同行的结果集
8 a' i" X4 L$ a7 s  JC.创建基于一个表中的记录的数据集6 J  w( r6 [# h" a4 K" C
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集) `5 t# z- D  K
E.以上都不对
6 p% e- w  r" }- _5 f! X3 t3 E& x

/ s$ M2 Q! b6 m4 R3 X% F4.以下哪个DBMS没有PHP扩展库?
7 v. L: x* F2 Z4 W* Q
; P0 q; x% V, X/ p1 @) O" uA.MySQL6 o1 T8 p3 {# F0 Z
B.IBM DB/2/ ]  D4 v* a- _1 p
C.PostgreSQL, p4 f2 a: ?: V, P4 ~
D.Microsoft SQL Server
& r& F6 ]6 l2 ?" J/ ]E.以上都不对
9 T2 j# ?1 V7 F
) s% q3 ]0 B/ K  Z% ~& Z/ G* L' b+ \; j9 R% U
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)# u! M5 q7 a4 }- y6 N6 s

$ D4 {1 Y$ @* W" F<?php
7 h. ]9 N0 y, i/ l* Q$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
( a" @- B5 m: k?>" A( r  Q% F' ?1 S$ v. ]+ z

0 {' D: y# c, V6 u) m4 KA.MYTABLE表中的记录超过1条
& Y/ u6 |& ]' K6 J  JB.用户输入的数据需要经过适当的转义和过滤2 F, k* J8 K: Q
C.调用该函数将产生一个包含了其他记录条数的记录
6 y/ T+ \" W& G$ e, H3 v" uD.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
1 I6 g' ?7 R: D3 hE.查询语句中应该包含数据库名1 r" n8 b5 `2 H+ S$ D
& Z5 v8 f. m, Q& z: F
3 `( B% r+ l) h  z" q, d. J& p
6.______语句能用来向已存在的表中添加新的记录。# Y; I( [4 n$ v: z$ j# Q3 i

. S% g/ U) S% r' h答案:____________
. v, \' V0 I8 d& Q- x1 L( P' Q* b( u( @& `* R: I

1 o, {( o! n. x( @7.以下哪个说法正确?; g. ~# E& S- u

# ^: M& j8 T: c: _4 ZA.使用索引能加快插入数据的速度
; N% B8 C1 F3 }% u4 C( Q8 ?, xB.良好的索引策略有助于防止跨站攻击
; r8 ^5 o8 g+ Y* s# t9 i7 i. @! @C.应当根据数据库的实际应用按理设计索引; A0 A0 U+ S6 \# p3 {/ @
D.删除一条记录将导致整个表的索引被破坏
& r0 U# J& T* m; GE.只有数字记录行需要索引
0 A7 r/ |: U  X& d2 o' ]- C: n* H3 B3 A; Y/ [4 g* M0 z1 {5 c
% o6 ?5 r7 i( m* E6 R$ P, o) H- _; e
8.join能否被嵌套?6 U+ [: H7 R& r1 j, i# X3 |* u

- P1 U/ \" z" X' H+ K5 H$ OA.能
& [1 s6 _) ~  l0 W4 NB.不能
$ k) b( I* `7 E2 X# i* w0 x' g
9 Z4 z' P) }4 \4 I, x9 a# x& I7 U
" V" c. `; M8 ?1 A9.考虑如下数据表和查询。如何添加索引能提高查询速度?# t, n4 S: N- ], G1 V2 f5 i$ Q

" a0 D5 @2 E- S: @& v) l5 OCREATE TABLE MYTABLE (# d  h# C4 ]" m3 F
ID INT,
+ ]- Q* q0 c* n4 Q( PNAME VARCHAR (100),
: ?* t7 [8 o% K$ sADDRESS1 VARCHAR (100),
: ~. ^0 t! ^3 B; Y+ }ADDRESS2 VARCHAR (100),
# k0 M. z5 A9 ]) b% p( u; wZIPCODE VARCHAR (10),8 i! y. f! p9 E
CITY VARCHAR (50),
& |, i" [% k; \4 z0 f9 }* wPROVINCE VARCHAR (2)( n$ E2 V% H$ |5 p3 H" H7 P% K
)
7 C: V& I& y+ b4 Y$ y3 L9 JSELECT ID, VARCHAR1 \9 a7 t* x5 D$ j
FROM MYTABLE
. n0 A* s9 m0 PWHERE ID BETWEEN 0 AND 100
% U9 z# b& W: n9 @; g& _; t/ jORDER BY NAME, ZIPCODE2 t* {/ {: }/ E
! g) h! x0 ^) j6 Y2 r
A.给ID添加索引
- B/ R0 G0 h  _6 [: }B.给NAME和ADDRESS1添加索引+ W1 i+ l( p- r% ~
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
* l# ^+ s0 ~( ^) v  ?D.给ZIPCODE和NAME添加索引# v# F& u: ]* L3 |/ j$ m6 U+ }
E.给ZIPCODE添加全文检索: P5 l+ ^) t6 a+ a# [
2 b3 I# ~( [4 \% X: l' E
$ }& }2 t# Z& a4 {; f5 }) y
10.执行以下SQL语句后将发生什么?" E: C- g0 k) J& q& }% E
, n7 B$ ?5 w& ^- V4 o. t
BEGIN TRANSACTION' Q8 \1 m4 g% v
DELETE FROM MYTABLE WHERE ID=1' V( F3 P/ ~$ W$ \
DELETE FROM OTHERTABLE* w8 E, k' Z6 F# o
ROLLBACK TRANSACTION5 w3 d' O; y9 F4 W* T8 ?
4 E% J  f; ^2 f, K* k6 V
A.OTHERTABLE中的内容将被删除) g$ _) X. K$ z
B.OTHERTABLE和MYTABLE中的内容都会被删除2 J$ n3 H4 t0 U5 r
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除1 G, \1 a5 [2 ^5 ^
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
: [/ ]; P5 D" \/ Q' QE.数据库没用变化
' K% C8 S) o/ Q* E7 a% S/ R( c( d' V
& r$ D# y. ^( q: m! y
11.DESC在这个查询中起什么作用?
& T; ^! F! L  o7 a$ f
( U# w2 T  o, ^% ?7 DSELECT *
  ^, e' c' n+ B  j4 U" V9 VFROM MY_TABLE
. Z. N  H# Y. F2 S) @WHERE ID > 0
5 [$ Q; Q. e* y& Y3 qORDER BY ID, NAME DESC
9 k- [( Z8 x, D
  @3 J8 u/ r3 j- R! r4 O+ _A.返回的数据集倒序排列* E3 y% k: B2 h
B.ID相同的记录按NAME升序排列
2 F9 k/ c" A) J6 j0 w* DC.ID相同的记录按NAME倒序排列
8 p6 y5 r3 e# QD.返回的记录先按NAME排序,再安ID排序
: {" x% P2 {( p6 ~5 yE.结果集中包含对NAME字段的描述
# w. X6 e9 N* B* t& q5 W2 P5 B  S5 n% {+ F9 }+ E
. r8 h! |8 P+ G. O) ^
12.以下哪个不是SQL函数?
6 M+ p+ b( Z( h3 x0 S
2 |1 {0 j8 g2 D. H6 HA.AVG: Y& A6 A3 H: {( c' b4 R0 o% T
B.SUM
7 c0 x& s7 Q, W% ]  Q* ?C.MIN
& t. J4 p, I' A1 I' ^) x& FD.MAX) `- c& \5 O  a( }# ?* I
E.CURRENT_DATE()
' K8 f9 R9 g, m
/ V  z& I9 g8 @3 K' {& v$ r7 [' a+ A' M. C
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
3 o, p. k5 Y, g9 A0 A5 ?; O! S5 ^. O+ @  h& p* P. X0 j8 e7 u# ]
A.该字段必须有索引2 Q6 @/ U: ]* ]6 d3 ^0 h9 G& k8 r
B.该字段必须包括在GROUP BY条件中9 r) s" c7 ^4 Z5 J# ?) x/ ~2 X% K) a
C.该字段必须包含一个累积值
" \1 M& k0 v% |5 J9 hD.该字段必须是主键. z: U: O3 Y' f# D6 S
E.该字段必须不能包含NULL值: \5 i, ^: e& [. y

* q5 N5 T" w( }4 ]3 T. I& p5 a0 \1 i" [# _7 `
14.以下查询输出什么?
# e9 e' k, q3 B+ M; L; s2 k" i- L7 N, c1 f- T2 V
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2" @' f6 P3 R: M5 s
ON TABLE1.ID <> TABLE2.ID
; M  N8 C1 ^" f6 |! H2 K6 c! s* o
A.TABLE1和TABLE2不相同的记录) l0 i1 R- f( [( g: o
B.两个表中相同的记录
4 b* R5 T" K6 b' ~8 m, R6 i' OC.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
2 I( H( j, H, U+ k* FD.两表中不同记录的条数, @4 I# m! N) x7 m4 D
E.数字2
8 |( x- v+ a6 O* l* n6 L8 Y
/ x# b9 I( j5 g
( p0 j0 W& {, c4 b" H0 i15.______能保证一组SQL语句不受干扰的运行?
# g( b5 \, P1 G, {
" M$ u5 f) F* {; g0 q% H答案:____________
7 I2 T6 Y$ l+ X' v1 e1 }* D
& N) P# n, c' E- C. V
, H7 q( g- s$ R8 ^, H7 z7 R4 z4 O* ~  A8 d. L
答案速查8 p2 }8 O  X: s/ R
1:BC# b, T4 N; b! l
2:WHERE, }$ ^( Z' @; y0 n
3:B
) o! X) O  x0 r7 n4:E- V' ?6 K% F# v
5:BD
0 X% n1 f6 u3 m, L2 ?- Y6:INSERT) F. O8 v  x9 o1 z3 B9 Z
7:C
- z  g+ n, a# O2 H2 C, E! b8:A
; [7 I) @# ~& S& @0 |9:C, @/ c3 d% I7 |8 W+ R2 g
10:E
+ H' w3 P0 ]6 K7 J" Q/ u9 _8 ^11:C9 I3 T% m# S/ W: ?* i
12:E
2 Y" T7 }2 _( _. T13:BC
4 g& m3 u9 J! T! H* ^8 W' ^14:C3 ]5 n) v' ~9 R0 }
15:事务3 G7 @8 j: w% O: Q& {
! s3 l  V% h! ^4 B$ N  f% T

: Q" y+ B/ w1 e5 U/ y8 S; |$ t: D8 b; L
答案详解! k- `/ M" A0 f- n# i* `

, _6 B6 U" p+ k6 k8 [: s; Y1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。5 Y  i3 I* b8 c0 \
2 ~$ K  U& O  m6 W
2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。- u7 E! s" N: ?* V3 ~3 E, x

, ]0 \4 t; I, f9 s) l) U& ?. Z3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。  N+ j$ W5 q% o. [

. t+ F# P2 L" M. ~$ a/ T4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。+ R0 G' W/ K! ~1 Y, T# B

& ^+ ~! {/ N4 C- ~; S5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。  N5 `1 g  f: M4 E+ [

9 S% ]- w+ \! [% Q: y: J6.答案显然是INSERT。
$ e" }' _' M2 a$ B8 j( C8 M) z( l# v4 {7 q+ o9 Q* Z
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。1 ?; s+ H6 |$ h2 l. A. u
' |' a6 w$ K5 V- z; `
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
) Z7 s! F$ `2 I  @- q3 z
4 `0 r+ O' V  I# t- L9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。% v: w8 z; e+ q' p' Z2 x  N

% `. H0 P2 V1 f& S10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
& n' S6 i0 G8 O. Y5 O  T( @  ]* h5 W( D. A# r! U3 N/ w! F/ Y
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。( Y& ?) j0 y2 Z' M8 k/ l8 N. ]

& r6 n$ ^! ?6 K+ O5 T* C12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
8 f& V* }/ i& e, V* |( @
6 n1 v$ r, j( _13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。( X8 S0 ], w1 N* I9 e4 D# x
" q0 g( p9 S9 d& F, u' p2 h$ J8 ~! G- h
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。
0 L  G- {. M, w2 h! ^8 C; P7 m+ z5 z4 \4 e( W0 p
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。




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