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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
9 o' u! `( Z% G/ `PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
8 u! E' o# I+ r6 m本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。* {% t9 C$ O( A# W3 x$ i

+ r3 Z1 J% `! x% ^4 R5 L: W) X% g( v. K% D3 H
问题$ B8 V. [: x" @

; Z: ], l0 g/ |/ W1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)( r+ D: Y/ Y6 B6 b
% c  f/ L& i: `- B. d' i
SELECT * FROM MY_TABLE
; v% b4 \  ?3 f4 E- A" A
, i; A+ h9 w, E# o/ lA.如果可能,用把查询转换成存储例程
4 x+ }6 Q& B0 w" K  b! LB.如果程序允许,给查询指定返回记录的范围. Y% D: i: V' W
C.如果可能,添加where条件) _+ ~1 {: Z; u# F+ N& ~
D.如果DBMS允许,把查询转换成视图1 o# C* D% r4 B  F4 N7 m
E.如果DBMS允许,使用事先准备好的语句# F) O& t8 b! ?, |8 v) d# a) V

/ s" `% C! H/ A4 X4 {1 _5 n  s/ \% v
, Z/ A/ Q% ~) L1 `2.可以用添加______条件的方式对查询返回的数据集进行过滤?7 [  h4 `4 v( T3 C. S+ R! ^

* O' A" G, I. W答案:____________
, b( J4 Y1 Y# s8 g" Q1 l8 S
8 l/ `) ]; D, T/ }& [) @0 F$ G* Z0 m- A$ y, x3 [
3.内关联(inner join)是用来做什么的?  D5 c' @( R$ D$ I5 R1 u6 t8 ?  O  F5 O$ F
2 X4 |! b4 S! k2 l9 B" e3 S; B4 X1 {% \
A.把两个表通过相同字段关联入一张持久的表中
/ u$ o* W- C$ C9 }- U- h5 A% \& RB.创建基于两个表中相同相同行的结果集
3 {: v% j1 O4 [+ l7 ]& oC.创建基于一个表中的记录的数据集4 e# h+ k& R7 m2 J7 J
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集3 }4 |& r% V# r9 C
E.以上都不对
" T+ B8 S4 ^# _' t, l8 `2 q. n$ N$ Q5 a0 G9 n

9 V7 f9 {8 t+ `' @  X2 `# [, w( C4.以下哪个DBMS没有PHP扩展库?
" D0 t3 Y7 o# o: X1 K
3 U2 o9 ]+ u, g. ^A.MySQL
. A# b8 y6 \" E0 w9 M6 mB.IBM DB/2* Y. c: Z( A) L  _; ]% A3 n
C.PostgreSQL
% L2 Q: R! ?+ s/ bD.Microsoft SQL Server) Y! N# g* t- @7 X4 d$ T
E.以上都不对) b" A* O. g4 V* ?, x- g$ q0 h

8 ^$ P, a, z$ s
0 _) c) `! S3 v# g$ \, K$ j+ c5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
7 Z: X" s5 Q- `. G+ X3 g
0 |" U2 `( K2 \( r9 v% x<?php6 ]8 ]# C- l' D5 _( }, \
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
4 }# V. K- ?4 d) M+ `7 y?>
) Y1 j$ F# |% y
2 r% ?) K0 }+ W, p: O1 WA.MYTABLE表中的记录超过1条
( {- U2 Q% c; _B.用户输入的数据需要经过适当的转义和过滤
* c% b6 G: R8 `2 h1 B+ |9 EC.调用该函数将产生一个包含了其他记录条数的记录3 A3 j6 j$ [* A; \$ X2 [
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除+ ^* ~1 v2 ]3 f$ I8 e
E.查询语句中应该包含数据库名& h* ~3 U, o$ v( {0 s- N

. Q9 C% e+ j  B' n/ o# T" r6 f7 n: _8 W& f8 C$ I
6.______语句能用来向已存在的表中添加新的记录。0 @- b0 }' P! f) ?
9 M+ }5 f+ @$ j+ _+ A
答案:____________* P" b! j9 x  \. e, G
; e' R" A( R5 s0 a

! R4 p9 H) E: v$ H7 @7.以下哪个说法正确?, F/ Q, H- D6 v; [( f% Q  D
! `* _7 `% e' J8 E$ `' @, r/ ~7 S
A.使用索引能加快插入数据的速度2 ^0 ^7 M  c6 i/ R& l3 U: b# w
B.良好的索引策略有助于防止跨站攻击
1 g: j/ p) [, s. e' t+ J. z0 e/ ]1 {C.应当根据数据库的实际应用按理设计索引  W+ `9 w) R, J7 V
D.删除一条记录将导致整个表的索引被破坏2 A/ R  N8 b/ v% R! x6 f8 Q
E.只有数字记录行需要索引4 M# A& W4 F- L# a
" W' r0 p/ p9 R$ e- b3 a1 B0 V
, |! v/ A+ c- S* x1 Y
8.join能否被嵌套?
$ |7 u9 o, u% K* `! k" ]! y7 s- B' R5 A- S1 M% x9 k0 ?1 ]
A.能
" n2 G# H2 M; a8 fB.不能
- c. E2 k# B+ [* h3 A8 m$ U9 x; F9 c0 N5 N
' x2 T" c* ~( |6 R; O6 M
9.考虑如下数据表和查询。如何添加索引能提高查询速度?
. K8 O& O$ b& r; j6 N( @9 Z; j1 x- R5 L4 `! w8 Y9 k
CREATE TABLE MYTABLE (
3 r0 b- @7 |  }9 E! o. k7 O5 `' pID INT,
' _+ S8 b9 Z; X& Q1 mNAME VARCHAR (100),( k+ M5 a* W5 K; U
ADDRESS1 VARCHAR (100),
  s- n$ ^9 ?! }& WADDRESS2 VARCHAR (100),
% m' g$ N8 b9 ^7 pZIPCODE VARCHAR (10),+ C$ D! I) s6 {4 u
CITY VARCHAR (50),- Y. i6 }7 f! R5 M" S
PROVINCE VARCHAR (2)8 C& a8 R  b4 ]/ E- D( |! o
); ~8 E- P4 Q, E. j' S
SELECT ID, VARCHAR
5 K+ i% }+ t7 O$ B1 ~  AFROM MYTABLE1 |2 D" v. d% ]* N$ K
WHERE ID BETWEEN 0 AND 1009 U5 a( M& |9 B, A) {$ W, q4 M
ORDER BY NAME, ZIPCODE' ^2 {) U7 i9 i0 x9 G, B" `( b6 q

# h/ d5 r0 I% ~/ y- L- sA.给ID添加索引3 D* F1 R+ ?  }
B.给NAME和ADDRESS1添加索引7 O1 F8 B' q4 U  l: B9 p
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引& Y" I& X$ y3 A; Y7 }3 N8 d
D.给ZIPCODE和NAME添加索引
3 k, y1 [( g2 E3 M5 |9 bE.给ZIPCODE添加全文检索
) M1 A: K4 t' d4 W; T7 c2 o) G& D

9 G/ l- U: v3 {$ ~  C1 r% c9 p& o10.执行以下SQL语句后将发生什么?+ u! l! `: U0 g+ |# h6 s9 F9 ?

2 `& e. R6 l+ r  h6 HBEGIN TRANSACTION
  {9 z' O9 A* Z' Y2 y' e( Z* eDELETE FROM MYTABLE WHERE ID=1
1 a4 _9 H, z& N; eDELETE FROM OTHERTABLE. _0 I# n  z$ x3 a, x0 r- o7 E5 _, ?
ROLLBACK TRANSACTION! v  [, _9 u* s* d2 M" A0 D+ L

9 y( v3 ~7 Q. ]) f' |& J$ N/ e% }2 sA.OTHERTABLE中的内容将被删除
* ?. m" _; s2 W; f9 c. g- ]B.OTHERTABLE和MYTABLE中的内容都会被删除
5 B- D) Z& E3 R8 ~, n6 zC.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
( L9 |" {3 H: d" d% WD.数据库对于执行这个语句的用户以外的起来用户来说,没有变化9 l3 Z7 a% R- M3 S- v$ ?
E.数据库没用变化
7 D9 T, p$ x8 h/ b4 I1 S; l, \: ?# Q/ V" R% t6 y
# v- T, m( f  R+ I% |
11.DESC在这个查询中起什么作用?
  C" K! F  H* K8 S9 J! x: n$ W
  H$ S0 e# f4 uSELECT *9 k" |1 R; Z  ^- F
FROM MY_TABLE
  _% U$ g8 S0 U  y$ YWHERE ID > 0
: d! j0 a1 O, b1 T7 ?2 U8 d5 D4 UORDER BY ID, NAME DESC
* u' V- E+ U: [% a/ K
0 m# N- j+ E- o. U( hA.返回的数据集倒序排列; C7 Y- W3 b. @
B.ID相同的记录按NAME升序排列7 I  e* S7 ~7 V2 ^' g/ `
C.ID相同的记录按NAME倒序排列4 }1 u; E- h& F! Y! Y
D.返回的记录先按NAME排序,再安ID排序4 l; k- `8 {0 `& v
E.结果集中包含对NAME字段的描述) D- i, V! z2 A5 s9 X9 p
6 u: ^3 Q- y; E& C# S; x/ Z6 d0 w
! V& |: g" c! C4 Q* f' w# T  v5 D
12.以下哪个不是SQL函数?
/ U0 d6 O7 a, F+ q; U1 M  y0 p8 |( W3 E, G/ f3 Q) I& \
A.AVG% [) w( b& K/ g9 }  b" u! U
B.SUM( E% v! k% \: P% J
C.MIN9 p( ]% m' [+ t
D.MAX
: p( ^+ v+ T0 u) {2 y1 DE.CURRENT_DATE()
6 x; K* w1 Z9 G8 e
) {# g2 u. m: p  \/ Q, r
9 {+ V; H$ p5 N13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
, {& f5 P# J2 a: u# P1 R2 C" [% u% @3 t0 E$ F4 c# n3 a' n% o/ M& Z
A.该字段必须有索引+ E! q, b7 R) y
B.该字段必须包括在GROUP BY条件中& Z2 U2 D% |# J; y) T
C.该字段必须包含一个累积值
# v0 B% M; z, @% ?( {0 T/ Z" RD.该字段必须是主键
5 O4 r* K  f9 X3 BE.该字段必须不能包含NULL值
: [/ s. C6 G, t- D$ W7 p% r) E. X+ }8 _
* ?2 i) R! \, e
14.以下查询输出什么?. _8 e5 Q8 o  o% @- X7 _' D* X! ^
9 w) b9 U* V. N  @5 E" ?9 I2 T
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
( w# K" |8 _! H- p' ~ON TABLE1.ID <> TABLE2.ID
) r7 p+ v7 q' [3 H0 v9 [# W$ S
( V3 z5 G) Y& CA.TABLE1和TABLE2不相同的记录" I1 c, T& n2 E7 }; j$ l) c- S9 u% Q
B.两个表中相同的记录4 D! E2 `) p0 I7 ]
C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数5 ], E- j# r8 \. x$ \3 l
D.两表中不同记录的条数
1 a: |4 C" z8 b6 {E.数字2
! x! `0 {& P/ a/ j# m/ L/ [; W
  \( l: u1 a" D+ V, @3 f! x- r2 r1 C0 m
15.______能保证一组SQL语句不受干扰的运行?% C9 v0 b  V5 }& _7 @! y/ x+ S+ ?
; v: A/ x3 I; n
答案:____________0 T: W. f9 t" b8 K) d

" z( H2 m# s; q- ^, b  `* F! ^/ L1 H8 S- Z# _, s) D$ g- y

4 Q/ `* J3 R1 |4 X答案速查; i8 }' A& I- c: j. t8 u* B
1:BC$ E5 l1 d, e6 A9 }: c  o0 H1 A
2:WHERE
+ ?( _! _8 M" ^" O3 ]% j' R" N3:B/ r$ h0 A  L  f; Y% e& Z" q
4:E' f7 y- p" |8 Q4 {
5:BD/ i. j3 U9 C6 ?& d6 u  L7 ]
6:INSERT
" R" }$ L6 u- W7:C
6 S0 o2 G2 t# C* A- x8:A+ p; `# e/ V9 K% D; F& G2 Z9 u) q
9:C
0 p# x/ g8 t+ u5 z! k10:E* Q5 \1 X2 H& G$ W3 b
11:C
7 G4 S; j9 y/ B% V5 c, ?) c4 F$ M12:E( n! Y4 d: r6 L( ?6 I$ S
13:BC/ {( u+ o; |7 q" s: P6 F
14:C
+ D* M4 F: x3 V! U- v" f15:事务) w2 H+ r1 X+ s7 O; W
7 D8 H' S  p+ O, z
$ R- T/ T1 T7 V# Z' h

# u! B0 @- v  z4 f0 k- M" F! E答案详解
& {0 k; N# |* j7 [0 \1 Y
, a& `, v3 c& [' G' \( A. g' E1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。/ C8 m) C/ b! g1 J  a3 q, T9 T. }# N
8 n; ^/ K$ ]( E  }8 e
2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。7 t7 l. F9 J8 o8 z% m5 W
% l/ [" I3 h, {2 M) T
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。
8 S9 V9 _# b, X8 r/ S6 B$ q, E' ^8 [
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
& H% q- H7 c: Y; V7 @$ @
; Q! W7 U, q! m: X9 l5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。( `  d/ L, ~" Y% r$ Q2 [0 V
3 G1 M, d3 y' p' O( X% E) n4 f3 n
6.答案显然是INSERT。4 I1 D! h! a6 T1 t- z9 Q% I5 M
8 e+ o) \, q. Z7 o9 J/ h; D: I
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。+ O2 H6 _% q+ t

9 M3 I" L! ^5 X8 H, u) a, \8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。* S* N7 i5 h3 ^6 s
% t; A! f7 b1 q' v8 Q
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。6 T0 W+ j* L9 r+ k
5 k0 p5 ^* X2 P' O8 A& I' O9 M; A
10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
) M# N# i2 s' d  A& X2 c: a; h
7 D+ }7 d/ ]8 k; i+ }6 P- d5 D11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
8 w; C5 j! s1 j* n0 H( V5 ~7 R! h  m+ K3 w. ]
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
9 v8 Q  j1 B/ @, x- l& }6 `( D: g& A3 p
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。( ~- |+ N: O8 K# q9 C3 L9 {

8 R  X" F1 G' m$ ?* w14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。
) D8 s2 k$ ]; D6 i* v% ]# K0 Q4 ^5 T1 W
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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