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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
. s, E; ^3 e: d9 o5 v7 @PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
( u, I) M2 D4 x5 P9 T( @$ F本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
* {  w9 a1 S) X* ]. |/ V; }( |& V( E6 `; T* @  l6 d

7 ]$ O: o( r: ], M8 L问题
8 W" ^: W' C8 x- y7 s; B
. }! g# S8 I  B7 `4 q# h7 c1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)
! u1 v  X. K6 f: z+ K/ l& z& }2 c3 {
SELECT * FROM MY_TABLE
5 `2 {8 t7 Z4 R1 A: l+ u: J2 d+ f1 C4 m$ @4 V
A.如果可能,用把查询转换成存储例程" ?' x/ h6 Q! V2 Y5 n
B.如果程序允许,给查询指定返回记录的范围) E: x" x/ N  F# P0 @: f' D
C.如果可能,添加where条件
+ y" D$ R. ~- VD.如果DBMS允许,把查询转换成视图
  `: K7 ^$ |" j$ R7 iE.如果DBMS允许,使用事先准备好的语句3 d! Q2 L- L* ~1 B
$ r! Y# v* S2 Q' A9 W5 \5 y
& Z6 J: C7 ?7 B0 A1 x$ ^, j4 r5 y: y; I
2.可以用添加______条件的方式对查询返回的数据集进行过滤?4 u5 Z: m  p2 }4 K+ J
  N$ {1 [, B9 P# g7 _
答案:____________
" s# [: q- Y0 _& M( |4 k* r  H: l2 N3 t" P- m; ?4 w
' @8 A( n! C4 \& I. Z$ z
3.内关联(inner join)是用来做什么的?( R7 J% i6 @+ T  H& u

, j# A- R# e5 f! o+ u& H. l3 AA.把两个表通过相同字段关联入一张持久的表中
1 n& Z/ G# Z; f0 W4 O* z" R$ P' YB.创建基于两个表中相同相同行的结果集- a' U0 t0 j+ w" F  ^8 I8 F
C.创建基于一个表中的记录的数据集
/ o( x- z! U+ H8 y& F& e- j! d  rD.创建一个包含两个表中相同记录和一个表中全部记录的结果集
6 @1 ]1 C  m  I* \0 nE.以上都不对- n% j0 Q. N/ D5 o2 p

; }6 j; i8 b* P2 j5 X: g4 }0 Y
' b- l5 L4 W3 ]- l4 e4 |1 m8 q4.以下哪个DBMS没有PHP扩展库?
7 I1 {! G' G& i! q% I  W  q/ M' q0 \! Q6 |3 U
A.MySQL
) [0 _" R4 k$ i) f5 o8 \B.IBM DB/2# k& Q# w: [5 v( t
C.PostgreSQL
7 ~- x# I% n* ~/ i  o5 nD.Microsoft SQL Server
- b: Z/ n0 a' r+ D9 X4 D% EE.以上都不对. t* t5 n& a% n8 T9 A- r4 N# u
( Z  `& d3 e# C/ K
$ J  _, {* w' v2 }
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)5 A9 @: N1 ~) _* `/ ]# W

  e! w/ H* o3 z6 v6 S<?php
# M6 z% Z! r0 G) U0 J3 H$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);$ s% O' c4 n; O! m8 b' ?
?>
" ]# S# J, R  w8 E  @" V2 ]* N
# F; t9 L" R/ i# `5 W1 y0 AA.MYTABLE表中的记录超过1条+ D! f5 V* c8 a
B.用户输入的数据需要经过适当的转义和过滤
4 J1 e$ \) G' PC.调用该函数将产生一个包含了其他记录条数的记录' c! ~0 i: v- ?# l0 m6 S. f
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
8 Q2 e9 ], \. G" J, wE.查询语句中应该包含数据库名
; T( K0 r0 s$ L8 {2 O* m3 L: y* ?  n! T5 q0 ^% n
1 F  P9 ]( s; ]6 q; Z; D" P
6.______语句能用来向已存在的表中添加新的记录。5 |2 @+ o7 t* C: C0 f

& I7 E; G+ _; p答案:____________* m; m8 x9 e9 A1 D0 _7 M; h0 z

+ ~1 w$ r9 H7 M4 o4 |7 c9 w6 j1 x5 ~) k9 ~! C: p: }' F3 v
7.以下哪个说法正确?$ ]8 t( B- k9 Q; Q7 ~( x. S
9 [9 i' n7 }/ t. @
A.使用索引能加快插入数据的速度
9 E$ F1 A# v: b8 b- N( cB.良好的索引策略有助于防止跨站攻击
) Y+ Z  _3 G: F! ?' EC.应当根据数据库的实际应用按理设计索引
  P/ c; C! [: Y0 o4 YD.删除一条记录将导致整个表的索引被破坏
6 s3 N% w2 r3 i5 e& D* r9 M* VE.只有数字记录行需要索引$ o/ Q# E* A2 A- D
8 U5 C, |7 p( S6 D% y

  D$ t) M% X! N+ _, D# K) J8.join能否被嵌套?
& I7 N, n& F! x6 E. a+ t
  l  ~& X! \! }) Y4 U7 y& @% }A.能6 i* [0 R$ T- X& E" ~. m' e! b
B.不能4 U* ~2 u2 O; Q1 D" T: i" ~

0 W; D% c0 f- l+ r0 Z5 ]3 e
; E! I& a- }+ R4 J  K- Z+ G9.考虑如下数据表和查询。如何添加索引能提高查询速度?
1 ^) J9 y2 s- C. J
2 _, P" I& w2 F# C" L+ BCREATE TABLE MYTABLE (/ l3 T& G1 L9 N
ID INT,& S( e' r9 a8 u/ m1 x7 D
NAME VARCHAR (100),
$ n2 p" i1 }8 U6 |/ YADDRESS1 VARCHAR (100),+ c2 A; a- c+ o: [: x
ADDRESS2 VARCHAR (100),
6 P- x9 W1 O. w+ x' KZIPCODE VARCHAR (10),6 D4 _% [- l: X' X8 G) U/ O, l: \
CITY VARCHAR (50),
4 W0 Q. M, S2 @) h/ k& mPROVINCE VARCHAR (2)& _' p/ V8 F: r3 k2 L  d7 ~
), |! J6 V9 b+ {4 G
SELECT ID, VARCHAR
! ?% Y* ^  u# L5 Y; H1 bFROM MYTABLE$ E- {' n, G& w) t% @, x$ L' L
WHERE ID BETWEEN 0 AND 1006 B5 b6 V4 D" C# K# S
ORDER BY NAME, ZIPCODE
& d7 @/ `  s: b  G# }( X5 }8 B) t# H% u/ |% F  E* \
A.给ID添加索引
' B* t: K7 D* PB.给NAME和ADDRESS1添加索引
% A! C+ z9 ^0 \# {, z3 s8 nC.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
- W7 V" I2 _0 C" V( }D.给ZIPCODE和NAME添加索引
4 D# B) h; h, U# H2 U, c' HE.给ZIPCODE添加全文检索
( H9 l+ I# z6 @/ i6 w  x
8 b# A1 v) X3 m& z: b9 G' ^7 w2 e  m6 a2 S# p) _
10.执行以下SQL语句后将发生什么?
$ r  e4 O8 K/ k( F; g- R' ]2 s( g( R" i& g* _8 ~6 m( c3 r( @$ y
BEGIN TRANSACTION& K1 M7 O5 s8 Q! N9 C! N
DELETE FROM MYTABLE WHERE ID=1
7 r2 m' O  s! W5 \DELETE FROM OTHERTABLE+ M8 G; s( V8 N3 n& ]' f
ROLLBACK TRANSACTION
7 E4 x- s; y& n* f) v* V
9 u: y: P$ f1 E- G, sA.OTHERTABLE中的内容将被删除* r+ O! j/ H8 H* [+ u
B.OTHERTABLE和MYTABLE中的内容都会被删除5 y8 O; E% ?5 }- o
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除+ Y8 M* W+ B0 ^9 O6 j
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化6 ?& q: {* `8 K
E.数据库没用变化
5 T3 T- O% r, U3 \- \6 `" q' T  R$ f. p* Q/ |1 G5 J
6 e- u  z9 C3 W3 y8 r8 C- d* Q
11.DESC在这个查询中起什么作用?
; g. S% ^+ P* t5 m" \: I' X
  F6 Q# v( j. e; T9 ?SELECT *
9 k1 K& D+ L0 E! N5 j$ b5 fFROM MY_TABLE" q- u# @7 `7 x9 I* s0 j& h+ z
WHERE ID > 0# R7 p6 W$ J) R' ?0 V7 E! C
ORDER BY ID, NAME DESC6 X! |( x( w  h! X$ K& a
; L4 |# C4 W' }  O+ H) T8 F  U
A.返回的数据集倒序排列6 ?' g/ G' m2 f5 v- @& o0 A* C3 ~
B.ID相同的记录按NAME升序排列
6 H7 u4 x) b; D* Y9 p+ iC.ID相同的记录按NAME倒序排列
4 g" D: E5 K, b1 BD.返回的记录先按NAME排序,再安ID排序- k* G8 K: }/ b: _$ |2 {
E.结果集中包含对NAME字段的描述( B* ?: Y9 ?! [( E3 X' K: X
) |: d0 a4 ^: J' G/ I

! n( s- Y: r; a7 V. s12.以下哪个不是SQL函数?, W. M/ \& V0 I

% }& _4 }! v0 u' w1 U  N4 RA.AVG2 R( g1 O! ~+ W- I- W! f" F
B.SUM0 m) \4 f- C, p0 }8 U# p
C.MIN
, j* j. Q4 E/ O; x# Y: a- Z8 Y0 f( ZD.MAX1 H" d! _9 L5 d" M* w
E.CURRENT_DATE()
, X' L( g  `! }/ V
/ V& _7 S# E6 Z& }- g/ J2 _( l! F/ Z
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
+ G  W4 h! V' q; e3 w8 ^; C, j  Q. n, l: H
A.该字段必须有索引- i" C6 v. k3 h; C( t3 p
B.该字段必须包括在GROUP BY条件中
/ v! L0 Q0 U4 P1 I7 PC.该字段必须包含一个累积值; a. M5 y( X" L: E" E) N7 }9 v
D.该字段必须是主键
, d" S8 [4 j3 N$ U/ |E.该字段必须不能包含NULL值+ o  C* B: p* T9 o
5 {: b3 U& w; L3 U$ j9 F

: m$ w- ]  K1 G; P; k# D" @) V14.以下查询输出什么?
; I  g" e. b5 N! G$ ]" {
- I8 M$ G% C. s9 N3 z5 o; {SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
" e- X' e7 J" K: d- G' @8 hON TABLE1.ID <> TABLE2.ID# ^  i4 [6 g  U! m, M. }! J  ^
: a+ y" C8 ]3 C3 r8 Z
A.TABLE1和TABLE2不相同的记录
* m/ o+ `2 e- ~1 P5 `: p, z4 K$ ^B.两个表中相同的记录3 n1 ?! C9 t% H, d! a
C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
( u2 V- N+ x; U2 m9 [D.两表中不同记录的条数
; C, `. K* }1 @% u6 [$ JE.数字2" `" s! N* A4 X( `; P0 W1 b9 o
; ]- X- J" P7 B. V4 w

' [7 S  ?! Y0 r: E15.______能保证一组SQL语句不受干扰的运行?) J0 O, M0 Q' g$ _
  q/ ]& T* |  j8 k$ P
答案:____________! E$ U# O# }) ~5 s5 a7 k; m" O

9 ^7 d' ^) \3 X6 V3 M/ _0 J: H5 g2 \/ {$ A& c9 J6 d+ s9 `

* O9 C9 y+ E5 g5 U' F3 H答案速查
6 a6 d3 V+ F, }& p- I: }6 S9 b1:BC% ~, I- W* ^% m, r" |4 s6 s
2:WHERE9 z4 G/ K& O5 d! b/ n
3:B( z  y7 u* X+ G1 r8 l  R1 b
4:E$ ~* C; [. g! m9 I% l% _8 I
5:BD+ ?9 C! q! |5 O3 ~& Z  h# z
6:INSERT  O- P; }6 p7 N
7:C
) Q; h* p0 h# @' m7 b: B0 I8:A* a9 `* [+ B* q0 z& M2 M0 C
9:C
, J0 k  R. u5 S7 {( t10:E
" P1 K* v6 |$ V- J11:C- D6 E6 X( Y+ I- `% o
12:E7 j6 O* f, a/ d/ ^9 z
13:BC
- j, R: k: D# G6 {  I1 f14:C7 z5 E6 ^' v6 r9 V
15:事务
. }6 H- X4 ~! U' J  Q0 A
" E" T& h" i2 b9 z" y6 L; l" x- d$ Y( k7 F* {" s
# w1 Q- Q+ V" g" ]: L) _
答案详解
9 y2 {* b& B9 L1 M( Y5 x- \9 r6 _0 f: r- x3 X# M
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。7 m7 v7 w& F# w  N* r' |3 u

% m) f; R% I$ ?& z# ]; e2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
+ D" G) f, j, L1 ~* I- w+ P7 i  O0 R" A" f! _, `' b# A* L
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。9 W' M/ `- v2 o5 X0 M

7 @) V! F, O# M) d9 q4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。1 Q; R9 Y$ X) c6 c- A

* S8 {  h8 j* q  U& ~, D5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。$ c  n! I$ |0 m. V4 U5 o$ f

+ F& X% T- `4 K/ V) R+ N4 a1 l6.答案显然是INSERT。" w, c2 T. E1 ?, Y+ j% \

2 j: {( U, H2 D) f) e3 C" b& t, |7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
( J, v1 Z6 s! W7 ?
: X) f3 I( Z0 A0 U0 ^3 D, e8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。9 d9 v( M' M- b

, |) Q* a( H# Y9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
: w! g1 e3 o( H3 R: }$ t
4 D7 u9 A+ o" o/ G( m9 W10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
6 o6 ^1 @' {# u3 W3 J3 [8 f. E
' n4 |7 ]; X" M! C11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
5 l- S3 b, c$ }1 K: Y+ H/ Z) }; p4 g' y* |4 V
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
! U- p9 R& A/ v# N6 D/ y
6 u6 g% i8 A3 ^/ }' h* W13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。3 Q3 f- D2 Z5 c6 k* L5 b4 I

% z: U( v1 s% D3 k1 ^14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。8 d2 c  c& e3 K) V4 w
7 P5 ]# U8 |  ^0 q4 c( Q# S
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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