Board logo

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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
) R0 u" H6 @/ a1 z) u1 P( L! S2 j  E' TPHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。9 ~) L0 b  S. n  U( [# S9 C# k. r
本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
: r% z! M7 `. d( h1 j& H
5 G" [0 F3 ^, m: c$ |3 u# o' M  @8 d# s5 a$ Q- O! E) V$ R% l
问题, T* D' d& k  t4 ?

1 e0 d  K) ?# @3 f' x1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)  R5 J* {( X; |) a. ]
& W& z5 y/ h! V8 K
SELECT * FROM MY_TABLE5 H& u$ Q) M8 K6 G9 L* Q- g

* o$ s2 G& R7 E. ?5 V& ^A.如果可能,用把查询转换成存储例程
; M( @/ F- X1 K" i: D. _B.如果程序允许,给查询指定返回记录的范围
/ H' i7 r) I! K# d, j, A% s: BC.如果可能,添加where条件( U2 C) @* u4 w" c
D.如果DBMS允许,把查询转换成视图
7 }* U9 [: T2 I; l" w/ I& E; bE.如果DBMS允许,使用事先准备好的语句! O% T3 N, y9 o2 ]. F5 {

4 E) _& U8 p, l2 \7 w$ A2 E& ?. |/ ]) J: S+ g+ B) N& _  P
2.可以用添加______条件的方式对查询返回的数据集进行过滤?" Q; z8 a9 _# c  _! r
- F' z: F8 @+ t# k8 P4 t
答案:____________/ e, F7 {/ x, F$ F  Z. Y0 t6 i
  i! S5 Q5 \( B9 v" g( j, `( P
* s6 F) Z7 d: f# Y, ~
3.内关联(inner join)是用来做什么的?" t; B+ Y1 S* y  }, d5 {

% n9 E0 q0 Y3 }  U3 B8 ]' iA.把两个表通过相同字段关联入一张持久的表中9 L7 b- e  K! `2 f+ j; n$ T
B.创建基于两个表中相同相同行的结果集$ x% l3 q8 w" I
C.创建基于一个表中的记录的数据集' \' G' L$ |3 v' `' F
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集
) x6 X% X0 {9 K! C9 [2 E: @& e/ FE.以上都不对) e- a5 ~9 }3 l  b, {: |+ x
1 X$ `% W  t8 L4 @
) [, f7 S. g8 q# b0 v
4.以下哪个DBMS没有PHP扩展库?8 M1 O7 ]3 D8 o7 G" @6 b
. T6 K8 D" M( E# |; H4 U
A.MySQL
5 x5 h, V% K, eB.IBM DB/20 J0 r* B" Y1 m4 |" [7 K: K* N
C.PostgreSQL5 E5 U: o8 o' R, W
D.Microsoft SQL Server
* ^9 Y, _$ Z% D' e' V. wE.以上都不对
/ T2 i  E% F/ m+ c
% L( i. s# m! R& u
" }1 a0 g) k1 d' V7 r" p$ _3 @5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)% W1 S- J, P8 V  \0 ~
* ?; x/ C' X' g6 {& e1 E/ w
<?php6 C" _0 T! [- O- b! \) E
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);* z) V: V. \5 [* Y& U
?>
( E" V) T0 U9 x) ~% @  P- X
1 P0 |2 ^0 ^0 [& bA.MYTABLE表中的记录超过1条
4 H/ D) S& ?% I) l7 aB.用户输入的数据需要经过适当的转义和过滤% p4 h8 P7 v$ W
C.调用该函数将产生一个包含了其他记录条数的记录
( s" p$ R8 A5 K" qD.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
3 `( ~7 m6 V% U6 U" K' N1 RE.查询语句中应该包含数据库名8 E6 l5 c/ y, \8 z" V8 c( N

5 b" I* \" j9 i8 P' c% X1 ~9 n  j! q. H3 e
6.______语句能用来向已存在的表中添加新的记录。  {' D' N$ l2 W- t

* w1 u! T5 w" _2 y0 \& |- p答案:____________2 r3 ]; q! D, u
' Q! m. a+ D' x5 F' |9 e! W
* l6 d6 i( p" f! l
7.以下哪个说法正确?
5 U/ ~: {) N7 S" W8 T3 z8 j1 X" a- y; N& ]" I
A.使用索引能加快插入数据的速度+ n! T4 O/ I* w* F
B.良好的索引策略有助于防止跨站攻击7 H2 s; K# ^6 j! A8 b8 I
C.应当根据数据库的实际应用按理设计索引. b0 E( F7 h. Z1 _- @2 ?5 F/ N  F% t. \
D.删除一条记录将导致整个表的索引被破坏& w# q4 {; `3 \
E.只有数字记录行需要索引
- V7 l4 n2 Q6 W- R& ]/ l0 Z9 f9 h7 O+ f
, f: ^, }! D2 H( v8 W
  s# L2 k" U/ j0 `8.join能否被嵌套?
- ~- x. p7 [, M0 D
" L$ s4 K. I! S' qA.能3 R8 F$ U0 ~+ Y+ e8 B# h
B.不能+ R/ [; U* `8 v1 c/ H$ O
' d  h2 |4 x4 n& q" u
3 T) p2 n$ d% F3 n7 L* K
9.考虑如下数据表和查询。如何添加索引能提高查询速度?# I6 f" x: f; s/ w3 C* @

' l0 [( `' G& W9 MCREATE TABLE MYTABLE (/ D' m9 i/ _3 }+ P  N7 m% v: u
ID INT,3 B- h+ l  w& G6 w9 `4 Q/ x
NAME VARCHAR (100),4 q& j0 o, ]1 F, y* k& }% Y& P8 P
ADDRESS1 VARCHAR (100),
+ H6 z% @$ r# _  c/ ^ADDRESS2 VARCHAR (100),
% I( i9 w6 B' S' p' I" EZIPCODE VARCHAR (10),
6 F" L2 K' G$ j. D+ f# i3 c* oCITY VARCHAR (50),
, `3 F2 Z1 r$ H8 O+ \1 PPROVINCE VARCHAR (2)
5 H; z( v1 B4 q, C4 c9 C) f, Q2 ])3 k! V/ [( f/ z/ z; W. x) ^2 p
SELECT ID, VARCHAR& g' C& j: t/ j. `1 v
FROM MYTABLE- J0 f( G7 o6 |. x0 M
WHERE ID BETWEEN 0 AND 100
" K8 y" s; j" b+ J- z% n! xORDER BY NAME, ZIPCODE! V) e8 ~7 z2 k

( J5 \+ v1 c8 ^! J* r9 I/ hA.给ID添加索引7 B8 K6 U: X% r; s7 P
B.给NAME和ADDRESS1添加索引
0 D* @  @  o1 E2 T; J; iC.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
# T1 A; \! t3 u/ KD.给ZIPCODE和NAME添加索引% Q$ }% j5 ?  S& [4 v" l
E.给ZIPCODE添加全文检索* e2 K+ p! U: n
& e. H1 `6 r9 z7 ^; _2 n

1 ]! R# d& d' w- R, Q) l$ d10.执行以下SQL语句后将发生什么?% i3 Y6 D# b. s2 j; G7 G8 [
+ J1 w! a! f2 ^0 p+ `6 L
BEGIN TRANSACTION
- h  j& B9 p' y. e8 `! T% IDELETE FROM MYTABLE WHERE ID=1
. x* b+ I% M; G/ j/ u' uDELETE FROM OTHERTABLE1 C' D# `6 [0 M! F7 j# k
ROLLBACK TRANSACTION& i6 k( x9 U; G. Q
; z* r+ R1 M, F; u& G
A.OTHERTABLE中的内容将被删除
' _! p. ^! g3 [B.OTHERTABLE和MYTABLE中的内容都会被删除: `  ~5 r$ X& e
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
) M8 L8 f' Y4 ~/ xD.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
: E/ m# J+ o  J' D% vE.数据库没用变化
) v5 s5 }5 W, P
. P7 \% H+ U) i8 B% ^7 L: D* y6 E, B7 ?: ]* {! t' |" H1 B" o
11.DESC在这个查询中起什么作用?4 a6 k3 l4 N' ]& V

2 C6 C! s7 z( v" ^SELECT *
8 L( W" \8 L. `FROM MY_TABLE1 ?; Y6 V! B. o- V# b; j
WHERE ID > 0" A) C. [. M; l# A" ~2 K7 k% @9 f
ORDER BY ID, NAME DESC/ D* ~; e/ f+ \1 d' a/ d
- P/ N7 P& V/ E( E9 f
A.返回的数据集倒序排列
7 [6 u5 y4 k- [/ n4 r5 G6 NB.ID相同的记录按NAME升序排列' G6 i, ]5 ?' S  C
C.ID相同的记录按NAME倒序排列9 J, ~/ J! c, i5 e3 [
D.返回的记录先按NAME排序,再安ID排序6 f, c% r: G$ d7 ], n7 I. ~& B
E.结果集中包含对NAME字段的描述( J  Y" K" @1 O; Z5 f) x6 @3 _
  ~' `/ X2 v  Z8 M7 H3 T8 M/ j
8 a8 f4 D; Y' |+ V2 A$ I) W
12.以下哪个不是SQL函数?- I, A$ L: i2 M0 T- r8 M; Z" k3 y% I

' i$ A4 O: x0 d$ fA.AVG
7 j( Q. ^, _) t# e, e7 M5 O) mB.SUM
* y, `8 P9 L( |+ q  zC.MIN
5 s. s/ D. w; ]; PD.MAX: L* s' l% D' i6 c, u
E.CURRENT_DATE()0 V; B# e& G/ }5 y$ F& Z# y
# m  k& h) ~: t) c! L

* U5 D2 G3 \* r2 {13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
! C6 t; [: D" k" s
! b; n% m  `: V9 N  i2 L% w9 h4 EA.该字段必须有索引
  _; F$ v6 W1 A: d# JB.该字段必须包括在GROUP BY条件中: F; D2 Z# L; z) A8 ^
C.该字段必须包含一个累积值
$ e0 N. A; `6 ?8 [4 |D.该字段必须是主键7 S0 r4 u& a' y) z
E.该字段必须不能包含NULL值
( B$ S4 g$ r- _  P7 P; x' T
+ y) c: n9 ?) ?- o: q. ?4 p) K, R3 @2 e  i" |3 u  ^* |/ J
14.以下查询输出什么?* M1 U& `1 T8 B* o

: R3 |$ n( Z1 x. qSELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
& w  R+ F) Y- Z9 N' g- |' iON TABLE1.ID <> TABLE2.ID" G4 c$ @0 z0 q5 j; o: R  ?4 C

2 s* g1 z; s% W  j9 AA.TABLE1和TABLE2不相同的记录5 U, Y! }3 |1 [/ l$ e0 i8 z
B.两个表中相同的记录3 l5 e0 ~$ |" X7 P, Z
C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
' k& k. `0 x- c( D; aD.两表中不同记录的条数( T1 O1 Z1 x  D3 o" x2 D
E.数字2+ z# D  L# P: o$ x8 n/ o' l: X9 c2 t

( O  Y# y% c( w: g; a! [* S
$ Z; a0 c- f9 E6 _/ d1 ~+ ]& l+ b15.______能保证一组SQL语句不受干扰的运行?# O# v6 J' b8 ^* l
( g# b: z# I$ z, o  T
答案:____________6 _# k$ s9 p  s' ^* T; B

1 [7 W/ [+ Z, f# l9 e
1 T( Z9 c6 D) q- V; h# c& n
& A: w9 I( ]$ Y7 h) |+ o答案速查) f* V3 L' n- F$ G6 C. V. a, Z
1:BC
8 j  R$ W" Z+ E% v4 h; f3 Z7 a+ \2:WHERE
- W1 u( A4 {4 ~6 Q) p3:B
$ m& z. w( B) U% G4:E* H9 `" g7 r% T. k( `  n+ r- r
5:BD
# t& N  b3 o% j" U6:INSERT
; |& P* D! K9 _3 \7:C$ L+ |# I& I. k% G6 N- _
8:A
; p% V/ E7 j" ]  R: w6 G9:C2 F7 H6 E/ x# ^
10:E2 e2 z5 V( W8 o8 T4 M- m
11:C
# h/ W. Q  l3 Q+ j12:E# b- w' l( _( O, }
13:BC  J+ f- N2 l5 K4 W4 \& r# C7 h
14:C
1 S" n- ~3 x8 I1 R' s, `$ [* T15:事务) ?0 W7 |& w' C1 R" k4 r6 T% |
+ a0 f6 o9 t: w* z$ Z1 v
3 K! s% d: @4 a) D5 [
: H7 s& ]& `; K4 m; G- [
答案详解* S* F' B; V7 j/ X
6 u2 C2 b$ r0 W; z5 d, s. q
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。+ \$ o9 H4 i2 _: R

2 Y) l% f  U6 K* r' @+ l! `( F, k5 O2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。2 g, ^" m2 z2 _& H4 I
8 o7 l/ h$ a7 H; i/ B/ u3 k
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。
0 i8 h3 B4 _; ^$ L( X5 F) }5 {
; s6 \% m9 s# k4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。5 y" O/ ~1 J- }8 L

' [$ }2 H6 J& C5 x: U4 ^5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。9 g3 G. u& |* t9 v  a

2 M+ S" q4 S- E, N# y' U6.答案显然是INSERT。3 A8 O" d4 x& ~" ^5 Z" |- Z
/ K3 g9 U' f; n  C+ L
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。7 x% q& m& t. X% N' h1 w% V# I1 T2 d& K
8 q+ J$ _$ f. {. v3 W
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。% I# K" @. A4 `/ @$ j+ z. }

  ~: H( B3 v* {# q' N) E9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。- ^, ~- R3 T4 d5 \' s) B& a8 p

# W/ T3 ]: Y; I: {10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。' Y0 S0 u0 D2 r/ u
& a4 @: ~+ p; I
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
1 W  J% r4 Q5 U5 d+ w" H4 U! `: J* Q/ C5 J' Q8 v
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
& ]/ J# @- O9 y' ~9 I, ~4 l& [
1 E+ A* P9 Y$ `! p13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
) O5 r- n; }* O" }7 V
$ h, h* [- G( b! a: H" d- w: Q3 Z6 L14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。, U5 Q7 A3 I) \/ J' f  z, O3 l
$ h0 H; p7 D8 q+ d' s
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。




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