返回列表 发帖

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。. i, ^: Y* {2 d* E  b! D- c9 z
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
. W% a3 M2 S- @/ D" z- r: w4 k% w本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。# |: a6 j* n) w+ F1 s

$ ?3 u* k7 q8 b0 o
! E1 e: }4 n5 @* f4 ]1 e问题# _( G1 z+ e! _: {
6 c. {$ T: }' x  f' e8 {
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)
6 r9 I+ U- |9 e2 _- ^" ~7 P; r% b) F8 r1 t
SELECT * FROM MY_TABLE
; Z+ e; e, g9 x/ j/ @2 P$ s8 B" g* I0 |4 l7 w
A.如果可能,用把查询转换成存储例程0 `+ f) a- a# X) L9 Q3 V" V7 v" Z
B.如果程序允许,给查询指定返回记录的范围
$ K4 r$ p% D3 K# z8 ]. cC.如果可能,添加where条件/ W. k+ p- ]  Q: o, ]; Q, j0 X
D.如果DBMS允许,把查询转换成视图
' m! w( B/ s: T$ ~! ME.如果DBMS允许,使用事先准备好的语句
3 V! F3 O  H) b: }1 _. H. W5 I3 I9 o) m8 m" U$ q" X+ e& ?
9 C. o6 j! L4 l% g* M7 |
2.可以用添加______条件的方式对查询返回的数据集进行过滤?
" Q2 S/ T' O4 g9 H( `* c. V
+ m' j  i0 o! F2 ~0 t' f答案:____________' y2 |- _4 E$ S% O

, N: ~; r" f. h
5 `+ T+ E3 H2 ?2 c3.内关联(inner join)是用来做什么的?
  X9 V+ Z; C' W% j+ u# W$ \8 m/ A" M# A
A.把两个表通过相同字段关联入一张持久的表中* Y1 V3 v! L7 P+ [) o3 p$ t
B.创建基于两个表中相同相同行的结果集& H  S$ u" H, m
C.创建基于一个表中的记录的数据集
! D1 v( R: m7 f, s3 DD.创建一个包含两个表中相同记录和一个表中全部记录的结果集
/ M: @2 s9 {7 \E.以上都不对
0 b, l# X9 H0 L! J& K: N' K* K+ S8 z. |# U
: @* M8 R: u" h- G4 C
4.以下哪个DBMS没有PHP扩展库?1 T/ o: q4 T+ F3 |  U9 a/ j: m2 I

, L, j- z: e# s) E  Z) u; Q7 N; bA.MySQL
$ f' V' v* L2 S" @B.IBM DB/2/ Y9 j' e1 c( V/ {+ b3 d
C.PostgreSQL
& I$ [$ ]* n& u" U; E- q  |D.Microsoft SQL Server( K1 T/ y. M' h  x9 z' ^
E.以上都不对
, m  j& f" ~7 _. f% D7 e( k' J
  [/ B+ P, h9 S6 K, O0 Z
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)4 D: |% d: n, u+ G0 J: x3 u" M
! ^3 B9 a% v  @) ^  q" ~, g: Z
<?php: R) j+ M, R; q0 c% ]$ C7 |1 ^
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
+ r; M  X7 F2 ?6 x+ Y" S?>
7 T+ |' t" ^1 D, O, ~" \' F( K6 N# H( F4 b9 w
A.MYTABLE表中的记录超过1条5 m* v/ T- Q4 M9 _
B.用户输入的数据需要经过适当的转义和过滤
2 O. g6 e) `6 D' T$ t2 ]* DC.调用该函数将产生一个包含了其他记录条数的记录2 ~" G& Y+ r  O! V  |2 P/ [; O! G* L
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除# [( x* |$ M" _
E.查询语句中应该包含数据库名2 Z: \' F$ d5 r' F) s3 j) `1 o

) m$ m; i  _7 m* a/ y- H$ ]
. r' |0 r4 w+ d( o2 |6.______语句能用来向已存在的表中添加新的记录。5 M7 X9 S2 Y, S! D' J
/ Y% n& N  Y8 a/ O; G
答案:____________9 }2 V: \1 S: g5 [. T

2 ~( t- V4 A& b  v/ J5 O+ t+ X$ v5 v* r- `- G
7.以下哪个说法正确?2 e$ ^- a) Z& {' b0 ^- [

5 ^, g6 V; ^. Y/ c5 u! ^% I1 HA.使用索引能加快插入数据的速度- O! `+ [( u0 S0 _" R
B.良好的索引策略有助于防止跨站攻击% o8 \& F: p" ?* c
C.应当根据数据库的实际应用按理设计索引% j7 y, }7 ^  _0 i6 g
D.删除一条记录将导致整个表的索引被破坏
+ Y! ?6 A9 i+ [9 I- x( iE.只有数字记录行需要索引2 o5 s5 G9 Y; N( u
4 x+ Y! m; K  o; a
+ w5 C0 I" P: k; w4 T6 T# c
8.join能否被嵌套?, S+ K( z, r6 P1 V& _! E) z

$ {5 D4 C" c; u( lA.能
* J! f: M3 D$ N" s4 e" ]3 RB.不能6 x/ p* a* s1 ]( k6 S

: o7 q8 H0 d; N
  c- f, L7 {: h: ~- D9 n9.考虑如下数据表和查询。如何添加索引能提高查询速度?$ ^/ a( K/ [4 a( g1 s
9 g) \9 V& Y( N: f1 ?5 e* g
CREATE TABLE MYTABLE (
4 z3 f6 S" q9 r- o" Z% @ID INT,8 R  m/ s3 e$ ~1 e. `0 U
NAME VARCHAR (100),4 A& m2 W# b. n3 B. Z
ADDRESS1 VARCHAR (100),: i1 z. l4 ~( Q
ADDRESS2 VARCHAR (100),
/ }6 s* [9 Q" }& r9 G2 t& iZIPCODE VARCHAR (10),
* I- Q, p+ y; D6 pCITY VARCHAR (50),
& u+ i& y9 a. l7 C# p& JPROVINCE VARCHAR (2)# L% \1 n2 ~: X5 i1 [- q
)
4 R% _7 w( E# m& k, p) n. BSELECT ID, VARCHAR9 Y) w/ e/ D; B" h3 f
FROM MYTABLE
/ G5 `: U/ V( X$ V8 o/ h! {WHERE ID BETWEEN 0 AND 100$ j+ c# d; N7 x" W! n( `
ORDER BY NAME, ZIPCODE
2 s6 }& w/ n+ h" O
9 |/ g5 }/ S0 P' P4 J* q2 VA.给ID添加索引
0 C- o' U5 X; `# CB.给NAME和ADDRESS1添加索引0 u' S% r$ h1 O/ I
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
+ X% G8 E2 K1 D- {5 k7 v6 W/ X2 rD.给ZIPCODE和NAME添加索引
6 I# P! Z( q# I. J$ xE.给ZIPCODE添加全文检索
. ?, P! j) k* d* o: p
' k6 z" c% h; B2 C2 t; T* w: Z
10.执行以下SQL语句后将发生什么?+ N! O! a8 h: h2 ^

0 L# O7 [5 a7 q# a1 Y; H9 K7 G' cBEGIN TRANSACTION
1 ^, q2 R2 O& ADELETE FROM MYTABLE WHERE ID=1
' L: m7 ]9 ~1 ?  N. G4 jDELETE FROM OTHERTABLE# @5 \+ Y; _, y6 Q* R
ROLLBACK TRANSACTION
2 S% z" C+ ^/ V; Z
0 [7 Q9 n1 c2 ?A.OTHERTABLE中的内容将被删除
6 w. H6 p5 Y, K  lB.OTHERTABLE和MYTABLE中的内容都会被删除9 ?& s* x' H* t, W) U
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除  H, q: |- m. }6 S8 q- p
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
2 [; k9 e9 Q. [0 P: \& Z8 RE.数据库没用变化- t" _9 m4 J' Q9 _; l

6 `* L! w( ^% Z% o/ F8 ], O
" g8 t1 p/ r/ k11.DESC在这个查询中起什么作用?" Q; e) Z8 L6 J# A7 ?; r
! [0 [0 q8 F* R
SELECT *8 x+ ]- X3 K9 G& [8 K
FROM MY_TABLE0 |  R6 }( I: a$ w. h' r2 T
WHERE ID > 0
# Z2 d2 E, v  {4 d/ DORDER BY ID, NAME DESC
/ _! c! ?( U! R3 c& G
5 u: l9 f& N5 Y- e0 Q& ^7 T& AA.返回的数据集倒序排列' w2 y8 E/ b, J. h0 m/ v
B.ID相同的记录按NAME升序排列
* e6 p9 y" q5 s6 x% N. a, pC.ID相同的记录按NAME倒序排列
8 t9 x2 k1 E% a0 l* F5 D8 H* O, [D.返回的记录先按NAME排序,再安ID排序
, W7 @3 _9 K: i6 }E.结果集中包含对NAME字段的描述7 v- j; P$ R2 p3 a7 ?

# R8 C8 p+ X& F; W" q' X
8 d3 V4 D5 w$ t' r. ?& J. G12.以下哪个不是SQL函数?! B( P6 u; }" v' y/ A* V  v. W" b

- q  U  P( I2 h% GA.AVG
4 y* T& p% g! G( HB.SUM
5 a& k% R: F% E/ W; p5 CC.MIN: E. W+ m  F9 @# `; r) t
D.MAX
0 A/ M' [( |1 d* E" H8 ME.CURRENT_DATE()
1 h  C) J9 ~' B
: O/ Q5 R. ]9 @# j8 `% _6 L$ |7 i( V8 B2 W3 k8 f+ K# w8 ]" X
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?/ K9 j5 J2 H, _: k" [  n$ _5 J

4 Y; ^2 Q$ Q! u8 f+ xA.该字段必须有索引
. P3 R. i# ?5 g7 G# U; i6 ?B.该字段必须包括在GROUP BY条件中
* y& d( B# p% D- PC.该字段必须包含一个累积值
7 ?( }+ g: f! n# w6 s3 ]D.该字段必须是主键3 ^! ~4 R# J! v+ `3 T" T/ i
E.该字段必须不能包含NULL值' E. |/ @& w0 [) z; h
0 r3 \) \) |) K( T/ e

2 \# ^% N+ E, i. R* g; v14.以下查询输出什么?: L$ B0 d* S* ^$ A( K8 M

) e2 a: s0 Z% @# [3 ISELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2) u% @: B" D9 W
ON TABLE1.ID <> TABLE2.ID
" y/ O! H8 w  b# q. O' V" D4 c
9 v. @6 O8 j0 aA.TABLE1和TABLE2不相同的记录
$ F: q5 ^" `  `+ Z0 gB.两个表中相同的记录
* T2 S  e2 B! i* i" vC.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数' |! F3 ~6 n2 l/ ?# L8 f& b0 q
D.两表中不同记录的条数$ k6 p. p: B( d7 D& q: _
E.数字2
5 }9 U& L9 a  \+ f  u, G  F; j$ s7 q& h( C* l. ?) G

6 M) `; r4 ~* M* }: C15.______能保证一组SQL语句不受干扰的运行?
1 {2 p0 L0 [& [% E) @  Q' y( @; l/ Z9 u* P2 [
答案:____________; \$ T( M+ S1 ?5 ?1 t5 j

0 F% v, e, K' u( l5 U, A, P* `+ s0 ~) _- |* R
) W2 p- V# O6 D+ @" R  @1 H8 ?
答案速查7 u/ |8 D- y' d  \) i+ p8 k
1:BC
1 Y+ \% r% k( y9 d) A! S& \3 @; a( v2:WHERE
# K4 ~: R# d8 S+ Q3:B
, H4 H9 w5 G7 Q/ B) {) {4:E, {$ U: S  |0 o8 u+ [0 P9 x/ g+ L7 k
5:BD
- e; z- Q! L# }( ~, F6:INSERT
+ I2 r8 G6 x" P( O+ r7:C
. b) o: z5 {2 I$ u8:A1 h% Q0 h' }  K9 c/ U
9:C
. U) {1 ?$ G' V0 N% K/ j  M0 N3 a10:E( G* |7 |1 a2 b+ j  P: d
11:C+ k2 Y: I) W- z9 w7 @
12:E
) ?2 j" a" Y6 d/ X/ D13:BC
! _% }' D  a/ V/ }# u14:C2 u9 w$ i; F/ i+ K4 N
15:事务4 X( G  \+ v9 z, V
  L( G: I; j+ \$ F* {9 t
2 z& ^* u+ t, z% a, `: E

* ~& j8 ?8 L* ^. W答案详解
& T% S  |7 Q, C
3 O( K6 d6 p2 f" E* X1 D. b1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。* r  K8 u$ [5 ?% u( J6 K. r

9 O/ E; k2 U: n2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
4 }; a5 m0 ~4 N
" F5 w  R7 t0 A' e3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。9 t: o: c2 ~' a; |6 ~5 O0 u) [
% |/ n9 o& ~5 y$ U
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。) V" r5 m, {7 P! y

: ?: q% _' }1 o# E5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。# C' G7 Z$ j$ O
& Y1 `! G1 h, R0 [, j: n' Q% _
6.答案显然是INSERT。
( J% \1 Z) e" R9 G8 E6 m
  C$ h( e$ i2 }4 Y. |7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。9 T' o! }0 B+ q. j6 E
) k0 k) e! o- S
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。9 X: S' Y5 [5 q6 Q1 r, L: o
" w) `2 Q7 O( O' T9 H
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
, g, i6 S* s: E+ ^- s3 g2 R& s. y9 K; l. X/ l  d/ N0 _& X
10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。& F% h$ a6 u: i/ M' i
1 x0 q( @; N/ N2 N2 D4 @6 A9 e
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。2 t( K+ F: s  V. d0 |$ n0 Y

/ u, N$ s; a$ M12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
3 [2 J# ~$ K2 x: `& c. r5 I$ C5 e8 I; a6 t' @3 J5 R: a  ~
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
. o. m) ]6 z- e. |# w4 Y7 v# s7 N9 v3 H2 L
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。  u1 X5 X, o& {4 M
$ e) N' J1 G- G
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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