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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。0 B: `6 f3 W9 B  ]5 G( s* j" X
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
3 ?+ |: g! a+ K+ T" I9 c( c2 g7 A0 K本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
- _8 V( y! [7 {/ P' N* O. {  g3 o' ^5 N$ \
/ E% _" s" V/ a5 p0 A
问题
# T: h5 t. }0 ~
; B2 w3 X7 U3 b& u  l& Y; o; H1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)0 {* G$ w9 A, f' h
9 A$ r! M0 d* J- h" T
SELECT * FROM MY_TABLE
2 b. r6 }! {( Y; @6 T; g" {# G; j1 F# |' f0 v2 B2 r3 c4 [
A.如果可能,用把查询转换成存储例程
/ R% @( Y7 \% Q3 X! J6 Y/ QB.如果程序允许,给查询指定返回记录的范围
7 r! Y* t. y2 k' j8 yC.如果可能,添加where条件
" m! u) p% E3 D. O; D) |D.如果DBMS允许,把查询转换成视图% _  |0 Y4 L- }( r- L1 Y% q
E.如果DBMS允许,使用事先准备好的语句
8 k2 g6 D' n3 K
" f" v+ R$ T! q0 R
! E/ T; g9 N) c& U8 C  l0 J+ k6 X2.可以用添加______条件的方式对查询返回的数据集进行过滤?5 u3 [& d  [$ E6 i
; {# }, `" {+ }7 @9 b3 c/ ^
答案:____________
. y. U. }" c: C* @4 q
# A0 J) a# A+ k8 X$ Q6 E- d
/ b# C! w: e. L: F" J3.内关联(inner join)是用来做什么的?' t; D3 t- J8 ~' P1 ^# t
& _4 d" Z9 n6 D& p5 _- _) }
A.把两个表通过相同字段关联入一张持久的表中
% M3 B7 R" k1 e; I# S; tB.创建基于两个表中相同相同行的结果集, J; J/ P& y! g
C.创建基于一个表中的记录的数据集
# W. E8 v: ?: I! sD.创建一个包含两个表中相同记录和一个表中全部记录的结果集
, |8 P8 T1 T9 w  hE.以上都不对5 j5 v# o- S& z! m0 ~

" ?! O+ Q' E/ e5 y5 N" M5 t! w4 V$ A; @1 e; q* }8 o) k. {
4.以下哪个DBMS没有PHP扩展库?+ W8 u/ O: D$ w. M2 G9 r# u) _) T

" A" A  T2 D' K: F; F5 K9 \4 }A.MySQL' p5 E4 X3 ^3 _* ~5 ]$ b
B.IBM DB/2
( a9 i" A8 y6 D$ QC.PostgreSQL2 a3 d* `% q5 I0 y7 Q2 \
D.Microsoft SQL Server. g' Z9 W4 z2 ?
E.以上都不对
8 Y1 |9 a1 N& f& B4 ?# n& R( u0 r6 l2 |) i
" p5 p5 w2 M% d% r0 p1 ]
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
" A5 F) ?$ E3 q
! _8 j! \- L5 c4 ~. k; ]) f& O/ \3 S: D<?php$ C$ E8 x$ o. D/ E' O+ \
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
, [( }) \" `  R* O4 `: w3 i. K?>/ f3 N& c5 d; ~
9 J3 [, w+ V  y- t  n" c
A.MYTABLE表中的记录超过1条5 t7 m6 H5 j, t6 v$ f; l2 j4 e' l
B.用户输入的数据需要经过适当的转义和过滤
; {& @% d1 n+ d7 b! Q$ z4 W" CC.调用该函数将产生一个包含了其他记录条数的记录: Z3 b* J* z' C0 J. G4 p( c  E9 }
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
: U' g: P, H- R6 R& O' ZE.查询语句中应该包含数据库名3 z. K  X8 V( D2 n6 ^1 y1 u' e. }

! w/ u2 a  J/ d2 F8 J
0 F! y. L/ N  e# a# I- S, S8 J6.______语句能用来向已存在的表中添加新的记录。* E! ^5 m4 v, ]1 L
& ~: `1 G1 I) A- }
答案:____________  p/ Y! W: G7 K5 F

- h3 [! ]' U" ]( m1 H$ V0 S/ i+ n. h
& @: d: R9 o2 _% Q$ K  Z7.以下哪个说法正确?; S( ~* l. J6 u6 o, {2 a
) y; H$ F2 l7 x; k% D
A.使用索引能加快插入数据的速度+ G" }) l. Y" S2 p( r
B.良好的索引策略有助于防止跨站攻击. u" E- w6 y/ _; b$ Q# h; m
C.应当根据数据库的实际应用按理设计索引) C1 ?! S' ]3 k% P8 V% R
D.删除一条记录将导致整个表的索引被破坏
( D, ~- |; {% R% PE.只有数字记录行需要索引: W" a( }8 M, K0 r, R! y
: Z( G3 l% G4 `; |7 V% Q8 L
, r6 u: Q* a- i5 F- q
8.join能否被嵌套?, o0 ~( a  x: I6 ~
* I5 h+ i$ }# {/ p9 C7 O
A.能
' V* v8 d$ H2 }B.不能
+ `2 h8 L! D! v% N1 @' Y7 _: q9 F. T2 q% V$ _4 }% \
& ^  P. j/ U/ X
9.考虑如下数据表和查询。如何添加索引能提高查询速度?9 p  |2 d- {, b9 P

! \  W1 g( K# F  a; O: }! q% J: jCREATE TABLE MYTABLE (* l( D0 u  d$ r" \( y5 r$ [5 l
ID INT,5 A6 a0 ^. Q3 q7 G4 g6 |
NAME VARCHAR (100),' J# I1 J( J1 J# n% p
ADDRESS1 VARCHAR (100),2 J5 y, e) A& x, ?, `9 n8 Z
ADDRESS2 VARCHAR (100),6 K' C% Q( O& A: y" q5 Y! R! ?
ZIPCODE VARCHAR (10),$ t4 J6 I5 J' X# E% C9 F6 G+ q
CITY VARCHAR (50),
. U  k3 k3 J$ g2 M+ @PROVINCE VARCHAR (2)% y  H' C" j5 D  k! \6 S
)$ J( R6 z$ {( D' z( r
SELECT ID, VARCHAR6 H9 B: z7 I. f! p
FROM MYTABLE
; d! {1 X: ]7 J! i+ h( TWHERE ID BETWEEN 0 AND 100
6 V) z3 r. ]" [- B, V' ~; pORDER BY NAME, ZIPCODE
( N2 f% Y" j/ S! {4 ]
4 X( s: K8 `) PA.给ID添加索引  U; c7 t& Q* ?8 V2 q/ r6 |
B.给NAME和ADDRESS1添加索引
1 x: m' r# p1 V% K+ u( O( a( oC.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
+ h- L9 V- L$ TD.给ZIPCODE和NAME添加索引+ m4 {& o3 g4 X8 t
E.给ZIPCODE添加全文检索" w6 Y: ]& }0 W; @& g) B0 L
# T$ \! V/ [4 \( J/ [$ b
6 Q2 F! N, d% _6 \4 Y
10.执行以下SQL语句后将发生什么?
& V. w7 ?" r! }8 _
7 X* f" t9 |5 W8 eBEGIN TRANSACTION
, ^( s$ ]& h  C3 W, S" B: ?2 uDELETE FROM MYTABLE WHERE ID=12 O+ a' K% l+ w2 ^4 s! Y, \% ~
DELETE FROM OTHERTABLE
/ `0 B+ h  H8 A5 Z" v3 y; yROLLBACK TRANSACTION
  M+ A; g$ t) W1 Z* g6 \/ D2 S; i: X! Z  ~
A.OTHERTABLE中的内容将被删除: O6 n& G( `; A
B.OTHERTABLE和MYTABLE中的内容都会被删除  o- }% K9 t6 G4 C" ]- C
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
! t* b% n0 s. }. @; G4 QD.数据库对于执行这个语句的用户以外的起来用户来说,没有变化1 W( b. g4 s: D/ i, h/ T" F- `
E.数据库没用变化' \$ j$ o2 K; [2 [  h$ l# t. U

4 v" q  N: P- t5 o% s/ s+ D
9 x6 ]- r+ I' S7 V6 d2 T9 Q, c11.DESC在这个查询中起什么作用?
  G) D& Q0 \$ W7 B0 Y+ s0 h
. J4 H4 t8 M2 _/ J0 x8 }- x& tSELECT *
/ P" b$ ^& i1 e& |* f% ]FROM MY_TABLE% l( M/ Z& n; T7 p& c
WHERE ID > 0
( \+ O8 r5 T& KORDER BY ID, NAME DESC
% g' K& h) k& t* l  r: ~1 ]& p5 Q$ n6 P
A.返回的数据集倒序排列2 P) F' I  F; R: ]7 n' p+ q
B.ID相同的记录按NAME升序排列& ?8 S& W4 A2 V" e+ }! C0 q
C.ID相同的记录按NAME倒序排列
. d% `  Z3 A1 u# P& C4 q7 L; z* U4 l3 A9 LD.返回的记录先按NAME排序,再安ID排序: Q* j3 @7 }" p0 n. }
E.结果集中包含对NAME字段的描述
; O3 ^8 H* ^8 j, h  k" t7 O
( Z; x  g- \4 A' r' H+ a) L9 `; ^! q8 _# `$ N8 ?( T; S
12.以下哪个不是SQL函数?  c  A: Z1 h; V5 f3 E
( E* I$ K9 s7 j( y7 K
A.AVG
8 f. f" p* ~) }+ W$ [, PB.SUM$ [. u6 ^. _6 _1 o* A; l' Q0 l
C.MIN5 ]# N4 Y2 ]! \. i
D.MAX
/ M4 S8 A' M9 q: M0 G: GE.CURRENT_DATE()" i. M+ u% L: A5 U/ l% j+ G
' R  K0 i0 b( k: j- W
9 W5 c# ^4 a4 N
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
  P$ M" _# x) T3 q: k; ~5 L2 l. M$ z6 K! U
A.该字段必须有索引5 ~- V2 {! r: F+ _. j9 `
B.该字段必须包括在GROUP BY条件中+ l. {( M- N9 l( c9 U
C.该字段必须包含一个累积值
. L! S' v1 t4 Z2 M+ f) a. l' m0 p4 uD.该字段必须是主键. g8 H8 C. p8 ?8 @* r5 p7 ?
E.该字段必须不能包含NULL值
2 ~  k! G; A$ n$ a7 R
0 c, S  j/ m! n4 ~# ^+ B' Z) b- X" `8 k6 L/ Q4 x; [
14.以下查询输出什么?! l1 j0 e$ m( P" ~3 H

/ {/ H% @* e" kSELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2* m! T  @) B9 l  s; S0 O, O- m3 s$ C
ON TABLE1.ID <> TABLE2.ID
: [( c- A; r- k/ s% t$ N" a) b/ t# x2 z4 u  l
A.TABLE1和TABLE2不相同的记录" k) D% N8 e3 y, z
B.两个表中相同的记录$ j, u2 l3 F8 S
C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
9 w# H- d2 }; C5 C- f, v$ T/ gD.两表中不同记录的条数
" z0 v' d4 g+ ]5 V8 Y! ~4 iE.数字2; e+ t( E. e# o8 [' Z) {7 x

  z. o4 ~  K9 q$ d
6 A9 J- R; I  g15.______能保证一组SQL语句不受干扰的运行?
, v: @* D" J0 `; C9 P4 I
# F  K3 `+ v7 [6 Q7 `答案:____________* J6 c  y; B+ T; d9 i  Q) j7 l

* X% q3 ~. ^( ]' Z( ^- O, E6 j9 c6 p" O7 ~0 `  w/ a; s
+ s6 _/ P$ K; r& @+ u9 N4 n4 l5 ]
答案速查  r) X9 B% j8 c
1:BC+ x1 {8 t+ d" Y1 f/ O2 L
2:WHERE1 [9 n2 ]+ G% x5 Q! u
3:B
% A+ Z; s1 U% A" \: W3 I4:E  k# ^; [+ ~" ?' C5 L! I& B" n
5:BD" d" f3 O" V# v* x
6:INSERT, f6 M3 u5 {& n4 C4 J& y
7:C
8 S4 G0 M! C9 N8 G& }8:A
2 n; R$ m: \1 f  q9:C2 k% @: M' C# k  q
10:E
5 \  U: j+ k6 K, E+ ?% \7 e  L7 C11:C) Z4 S. A" T$ S  k; `4 [+ k) P8 t
12:E9 c$ O8 o! s+ q" J
13:BC! h8 t, y7 _& y4 u% M% c' N' r5 R/ R
14:C
& g' Y$ ^' }' q: E1 k1 g15:事务
+ k9 p$ F; `2 {% \5 E: {
2 s  x( J1 f8 C4 G/ i! m) C3 M5 p6 n4 H/ E% W: v9 j; H6 a
* [4 Q' v' J% [7 L/ Y
答案详解
" g+ f$ t, L# l2 [0 h
0 C; N- ^/ P( ^" v% f  K% l1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
& h' y  t5 L4 H6 A, ]7 ?
! p$ s7 W5 ^, |" m2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
- e, y8 F. U( D. ?- H
$ y/ Z' P0 G0 K7 e4 v9 N7 E3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。" c4 F" L/ H4 A
+ F# t$ O7 `+ C
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
+ q! a$ M8 T9 l0 h- u% Z
7 S, j. M, u5 ^# v: j% @5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。
; W4 y3 _  h& z+ t0 O  ?
2 t2 y0 C+ z* \5 X6.答案显然是INSERT。
1 K( \" |+ p9 k* w; g$ B# ^+ ?9 s/ [4 S: |6 r- X: x8 x
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。" A8 K4 ^, w9 u% G: v. W. V# t

  k4 P. F+ a: P' B4 y8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
* b  r6 O( F# `2 X) C( n! b- @; @, B7 v( ~
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
* Q- B1 v1 J- k0 ~4 M% M7 O! n7 p; W! F4 R$ e( j( s
10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
* _9 e0 c7 u" j! g* f
+ v" y# r2 M  v( t" Q/ f11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。0 M8 |' H: h7 y  s* B

. H- R& l' o& t, w, c12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。' E: v  S- H3 y- R% y3 c4 S
: J% n1 j7 _) o& P5 s/ P  u
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。  k  C6 l; G. E/ p  J8 O: a- U' C4 x

0 P' S. x% Y3 e14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。" h2 n4 \3 ?+ T' y5 ~# p& ]

/ F- e# g3 U+ \  G15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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