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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。; V+ w) j; C5 X5 x5 G
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。! }  _6 U, m' t  G( x$ J5 ]
本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
- U+ i, W8 o) ]$ P3 j  @- Y
: c8 H6 l0 _8 c, i' b, e% W4 Y$ ?/ o0 b4 B9 R! Z" u3 U
问题& A  E: Q+ g  V, d! g1 u6 _

4 C5 V  T/ U3 S& \; {( v1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)
; L/ q; X, H5 l  c2 I
9 L& H6 I1 v$ x9 w7 KSELECT * FROM MY_TABLE
0 P. l4 \8 N% T& [) D5 h
1 y- f* g3 T, N: ]/ YA.如果可能,用把查询转换成存储例程
+ }2 h; [0 X5 i. KB.如果程序允许,给查询指定返回记录的范围
1 G$ T0 z1 i+ b- W2 K4 k3 q. FC.如果可能,添加where条件
+ \1 Q3 _, O0 ]$ E' b$ ]6 k. `D.如果DBMS允许,把查询转换成视图# C: N8 u: ?5 |
E.如果DBMS允许,使用事先准备好的语句; |3 N* ?  @3 X$ R; c7 j) j) y: [
+ N: @6 N/ `; ~
: w* A' V8 z2 E# b! s) \
2.可以用添加______条件的方式对查询返回的数据集进行过滤?+ _3 X  n) \" B6 _
" o3 G  d8 A9 j4 L2 j
答案:____________
# E* {: p, r4 f' S; o. S, v8 x  q1 s  X7 X6 N. a

7 p) \$ h6 |5 r  G6 S1 j/ f3.内关联(inner join)是用来做什么的?
& R+ ~0 x& H3 P" H
: u6 \& A! b0 P* \) {/ ~  rA.把两个表通过相同字段关联入一张持久的表中
6 @0 b$ f" p, BB.创建基于两个表中相同相同行的结果集
# j* Q9 C1 I. d8 W- RC.创建基于一个表中的记录的数据集
/ @3 t# D) E, p! iD.创建一个包含两个表中相同记录和一个表中全部记录的结果集
, l. q5 W! e8 ]2 ~+ e8 t' ~E.以上都不对
& t# ^/ H, T! k
3 R3 z7 X. b8 |( _: E, }
; q/ [  ]! d' ]. {+ W& h4.以下哪个DBMS没有PHP扩展库?' v. x- P( e& w
) l7 L8 l6 d6 d  p, f6 i& Y
A.MySQL& A+ t5 J7 w" \$ G: o" [! P
B.IBM DB/2
/ I" u+ G  Z( e" x2 I- sC.PostgreSQL
" X: |/ h+ A( ?. z1 b" nD.Microsoft SQL Server" \: X9 v9 ?0 e1 T" l" j. M5 s* r
E.以上都不对- s1 S5 w, |, `; \
* P. h' Y: g5 Q& x& D' f

5 L( @( ~$ H; u0 v7 u& U  D5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
3 i% E* ?6 E; p2 Y
- T# F# R7 }6 e8 T<?php
3 w1 x2 B( T3 k" z% B$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
9 C6 K6 x. u* Y6 @& v* f" v?>
3 r  T0 m) A: k+ c7 f
$ n+ J2 w7 l" }: a  \0 d4 I. ^A.MYTABLE表中的记录超过1条
1 Q( K% b( V' l/ k3 X8 u; NB.用户输入的数据需要经过适当的转义和过滤3 M" I0 r' N: B" P2 L4 ^7 R
C.调用该函数将产生一个包含了其他记录条数的记录
7 @7 o5 e0 j; x8 x# d$ K" LD.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除" J9 @: E* Z7 ~) k
E.查询语句中应该包含数据库名
8 s2 I# f0 o' ?( z, m5 K, N, P& _# j# K- G) q  ?

% Q: f; H7 B! }, W9 e6.______语句能用来向已存在的表中添加新的记录。
* ?0 L* X# s  ?' d
/ Z9 i) ]2 Y. y1 P) }5 k答案:____________( x' B/ T8 B! u; k
/ T3 O  c6 ]! K, r

( f' u& ^5 j9 e$ L6 v4 Q7 O' f7.以下哪个说法正确?$ U3 D; T! e, A8 j6 @6 f9 f( F

/ a: R0 t9 T) pA.使用索引能加快插入数据的速度$ E( B. l' Q9 G# M9 M
B.良好的索引策略有助于防止跨站攻击* @) s# L, X% Q
C.应当根据数据库的实际应用按理设计索引* S2 ?$ U: s2 ^; z8 v
D.删除一条记录将导致整个表的索引被破坏5 F+ U/ @6 y) m4 A+ z; q
E.只有数字记录行需要索引
7 n; M% E/ d3 C4 B: X$ }; r3 c% ^! k  r
0 |8 E& x- F- P# P" G: p8 X! |
8.join能否被嵌套?
. j6 _+ x9 Z: s) p  s! {' t+ K& |! Z' Y5 q! Q( M: M( r  n
A.能! L2 B/ |0 n+ U# l1 u
B.不能: e! [" ~% I, w+ I7 Y0 F
  p5 g# o" [/ J1 _( W3 a) A. Z
* p' s) [3 f: `4 m6 j
9.考虑如下数据表和查询。如何添加索引能提高查询速度?
/ e; ]0 ~% N5 P% }0 a( d
1 c$ T; G% _( q: [: m3 n2 h" y" J; WCREATE TABLE MYTABLE (
- S5 K1 j0 k5 A, }3 j8 FID INT,; i' `# Z- K( }* B* g
NAME VARCHAR (100),9 X4 Z: k# J7 n& V
ADDRESS1 VARCHAR (100),
5 |( h8 v+ ~0 \/ p1 J8 ^ADDRESS2 VARCHAR (100),
; m( P+ N/ k) O' R! OZIPCODE VARCHAR (10),
8 c+ v1 U- \: |# a4 ]' c8 J, gCITY VARCHAR (50),' G9 D# N7 r7 a( ]1 x" T4 l
PROVINCE VARCHAR (2)0 M  |% ^# ~2 h! R$ J4 p0 E. T  h3 V3 ^
)
+ O% R% a# I$ X5 JSELECT ID, VARCHAR& j% X9 p1 F& h4 H
FROM MYTABLE5 l3 n; @0 R/ i8 c# A0 P3 G
WHERE ID BETWEEN 0 AND 100% k. r3 P( o  e% W5 ^+ i  }% p4 z
ORDER BY NAME, ZIPCODE7 Q8 x* q7 G! O7 O8 \! u5 {' G
# Z( E; m5 R. o( t
A.给ID添加索引
1 j* V& L& a. `* M5 \. qB.给NAME和ADDRESS1添加索引3 b( K% x) w% m
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引, I9 f5 c) T; d3 d5 x
D.给ZIPCODE和NAME添加索引
; t1 G) C( D& lE.给ZIPCODE添加全文检索
* a& N7 Y* [9 D3 [4 Y0 {6 a( k3 G' Y) g! n6 ~2 S

1 F7 Y- Y0 p, z$ V) b% E, n7 d10.执行以下SQL语句后将发生什么?9 m, T5 _0 _% Q2 Z$ B2 P

8 B* Y5 B" ^3 }0 g) h- g. mBEGIN TRANSACTION
# N/ P, ~) J( T  ^2 f7 Q! e7 |+ ^6 |8 CDELETE FROM MYTABLE WHERE ID=1( j8 g: [  Z7 R4 A0 j  z, F  ]
DELETE FROM OTHERTABLE
, \$ E7 {3 \; }5 n1 @. TROLLBACK TRANSACTION0 @$ |" q( g  R2 X1 z8 C
* ]8 d) N( a; q8 d$ g2 }0 G! Q! b
A.OTHERTABLE中的内容将被删除) ?$ o( r# Z. V+ ^/ x
B.OTHERTABLE和MYTABLE中的内容都会被删除5 l# h# R1 E3 c: Y6 |% g; \# g; e
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除1 D8 o4 h# Y# O9 v& H
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
% Q1 e% U8 I/ U" W: E# S9 rE.数据库没用变化$ |9 F. R4 I- b" V& U- n# ~
9 e% `! W" e+ _, Z7 Y/ e! c
% `4 d0 d4 @  C1 s2 @: s$ V
11.DESC在这个查询中起什么作用?
9 C, J9 F5 B& K1 P
  ]& o! f) i5 [. n, U9 _; lSELECT *: ]/ t! H* i! P# N4 V
FROM MY_TABLE
: @( Y- L+ Y; d* N* M1 k: vWHERE ID > 02 t4 Y5 @  J, V# r) ^  Z+ T
ORDER BY ID, NAME DESC# Q% G! F1 R7 Q+ r* K
- H* W5 n! G8 j% S6 }* f
A.返回的数据集倒序排列
% X* a- a2 X8 P2 K. d  _& l8 G9 j) sB.ID相同的记录按NAME升序排列
9 C% l. N& ^. V9 x/ UC.ID相同的记录按NAME倒序排列
* E/ S% X/ ^. f  WD.返回的记录先按NAME排序,再安ID排序. v. A& M* G* n% k, {9 [% c3 y. \
E.结果集中包含对NAME字段的描述
* M& B3 ^' P, `- q( G  ?
; d/ i* b$ w8 j+ V. g4 P+ n
( w# E* ~  Q9 J) ^) u' U" u12.以下哪个不是SQL函数?6 F) Y* z; d2 G- g* A/ N; @+ c
. ]1 T; c( \! z0 [6 a# L7 k: f
A.AVG
- D# M8 ]" D4 h, s' @B.SUM
' ^/ j; T3 o, z! l& D9 P- R) ^C.MIN3 _' s4 f7 [/ p
D.MAX
! U9 Q4 r5 l+ O! V, r( ZE.CURRENT_DATE()
) I' K2 M. k( Z5 _3 d% J; L5 V% X3 N
' S  q. f  q; R9 r  H, r
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
- W( m$ t2 A# E9 X
0 g7 ~- Y+ z3 iA.该字段必须有索引$ n. Z/ _- |+ H$ w; K0 w$ J" i8 J
B.该字段必须包括在GROUP BY条件中
2 d$ j) Y. ^! ?; V5 v% u% gC.该字段必须包含一个累积值2 Z1 C/ k  n5 s7 d+ q* |3 d
D.该字段必须是主键
2 W" n1 K; a8 H! h* xE.该字段必须不能包含NULL值
3 b2 @; v; a: x( t9 }7 B
5 x% T- N6 O  C* P7 b- p! Z& e8 N' [! b# ?1 g  b" @
14.以下查询输出什么?( m  Z+ r; E6 T) y8 b5 M
% q$ R2 K" r7 t* @: F
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2/ x5 B% c+ N6 B3 ~8 q) T
ON TABLE1.ID <> TABLE2.ID* e7 J* x3 h" R% n1 q, q" \" q

) [( a( D' r. ]A.TABLE1和TABLE2不相同的记录
8 D2 o% W$ N& X6 bB.两个表中相同的记录: y, ^, m1 j1 }8 i/ @6 h! x
C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数7 R( ]( \9 {; \8 S+ e( y
D.两表中不同记录的条数
" c  n$ B' ^# _' e$ L: lE.数字2
7 z* ~7 j: W" @) c9 j) D. W6 @3 ]% R( W8 D
; R( |: z0 C& N
15.______能保证一组SQL语句不受干扰的运行?
& x0 c7 k+ r9 @/ R2 L9 ?1 c5 n* k6 }+ Y
答案:____________
' M3 i; }- @" j
. c. ?6 ]! `5 k7 k& e0 A( S9 i" h  ^1 R* ~, ^! y' ~* Z" f
. C9 g4 L# U) g. K5 z) J( |$ m; N
答案速查
" i2 I+ P, B& l7 }# U7 L/ Q1:BC% v% q3 r' Q) t6 o- G
2:WHERE
4 b+ @* U, `& h7 z1 h3:B
) K/ n, g% J# W% Z4 l, y: G4:E3 N+ |# z" q  {" A5 g# l# P2 D
5:BD
* V1 B6 U- P& s% A# P6:INSERT
1 Q9 U: p$ G/ h5 A7:C, r/ m% X6 C$ ~4 D0 @
8:A
. O7 l, I* f' G  d" m0 D; w9:C
+ E1 v# K; l% Y/ R+ Z5 w3 \! [10:E
( K$ x( d' [6 w0 b; j' Z( P11:C
1 c( M9 h0 f2 F12:E
  k1 l* J/ t- _* {7 l% I" P13:BC
0 b  S3 K$ ]6 b. x+ }14:C
  _6 k! x# Q8 @8 b15:事务
8 S* N" @: C( c- p2 T9 J' P" ^  u/ E) s
& V; J% k4 Y6 x

+ _) ]. e! H4 E" @( |' S! ?  q# F答案详解
$ k) ], Z- h* @, M- P; N# A# d" Q- K# Z8 C/ }& I* S8 b
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。0 ?% t  B# U9 @. \# D3 V; @

  [8 d. h# @: Z2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
& Q; f' a' N; A* E6 K1 t
/ H  K" M" d9 i, y$ Q3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。
  A* L. M; N5 P& x# Y3 r: f0 M0 Q+ p/ S5 Y
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
( D- M1 b5 r7 \( m4 @, M8 G+ V( I
* }+ x1 T6 E0 e8 n% V# V0 q5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。- g* _8 b- a0 a! e! j) b

( n  D, O% j& Y& z2 a( H6.答案显然是INSERT。3 _5 `- p8 a/ s4 ~
5 o# ~# s1 e3 \$ h) V
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
( A2 D$ h* A. _* v9 K, d& X
+ p4 P/ w$ N4 v# o8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。! h1 L- M8 i3 v0 U) ?

, J7 Y! ^6 c9 L; E3 T6 J& p8 w/ r9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
" c# |# X% d# E' |, F9 Z5 y, \8 A$ e& X- q& Y/ [
10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
& @5 q3 x* o( d3 {/ e) Y8 n* J# b" V6 L* v' e8 b# g! J% d
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
- A3 }! `" o1 n& e4 H- s4 g" m0 m) l7 s* t
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
# o; F+ J+ d9 y9 V* d& n
4 j6 q9 {+ v5 {; w& ]! Q  ]; `13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。' V0 C; g( j5 [! i, n( }' k# m. e# c

0 D- O- |6 y: |( [6 p& D& ?14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。, o; n2 w, [  i' D" `

& W5 n+ \" p. p) o15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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