返回列表 发帖

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
* g& H7 }* z% P, IPHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
5 q( u! A; ~& d+ n9 |9 s本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。) a6 H, u: G# T1 N
+ e/ U# g1 N# N1 a: m. u/ C

, O5 Z: Y! I3 p3 i( I问题
$ Y- j" _' U8 w  F2 Q) {
2 z% F# Q4 \3 q* J1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)
6 ?4 k5 ]: ^% `' c  \# p. X: m5 _4 Z
SELECT * FROM MY_TABLE
0 {# W9 a, N: J3 {/ C/ S7 f/ j3 x4 E+ v
A.如果可能,用把查询转换成存储例程- W$ d1 n, J4 K9 T8 l! f
B.如果程序允许,给查询指定返回记录的范围" I, U0 d$ X( Z
C.如果可能,添加where条件. a1 |( u0 |# t8 g3 i/ G( [1 E6 p7 j" h2 V
D.如果DBMS允许,把查询转换成视图
! Y: Z: ]  [1 l4 E0 FE.如果DBMS允许,使用事先准备好的语句9 d6 Q/ O* p' A! ?& P
, C  P0 |( t* u% x

( u8 E$ X' }$ K  L1 s$ E2.可以用添加______条件的方式对查询返回的数据集进行过滤?0 u+ r9 @- `+ d' R" i1 ~
/ Q/ W# U6 D9 V! H1 T
答案:____________0 T! s8 i' _( `% f4 U
; C1 I) I( f% {' T, b5 K
% G+ M& [3 ?/ F  b8 A$ d. ]
3.内关联(inner join)是用来做什么的?
. s+ j# a4 a, q. a$ Z$ v# L) }& {% W, L, I
A.把两个表通过相同字段关联入一张持久的表中" {* V1 _, e5 a3 F
B.创建基于两个表中相同相同行的结果集) u2 Q4 W& _9 y- }
C.创建基于一个表中的记录的数据集
( i% {6 y9 Q* O5 T* [D.创建一个包含两个表中相同记录和一个表中全部记录的结果集
) f. o+ Z% X* aE.以上都不对+ |" O1 n* M5 f' j1 g2 I$ ^
, q* C! Z6 f. J) x" X# P
# W1 i0 A/ d. w' _: M4 U) L2 H
4.以下哪个DBMS没有PHP扩展库?3 j. F* L, q" I' d% Y: _. L/ ]

1 E( G+ y, n! B6 b+ e( c$ u- FA.MySQL: I6 H0 |2 p$ a% W" q
B.IBM DB/28 Z" s  ?, Y" Q% k
C.PostgreSQL
7 m7 E) ~* V, ID.Microsoft SQL Server8 i; d4 q+ i* Y: J3 i& Q3 q! M
E.以上都不对
* F8 d& {) E% H4 l' C" g
' V9 {2 I7 M. l4 T+ R! m
0 T1 c9 v# w; h9 ]1 O$ c* |# y5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)5 \$ M1 Q; j0 O6 X  D$ z/ ]
, _  i7 @/ U6 [. r# }; W, d7 E; q
<?php
% Y+ a8 K1 g1 {7 k$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
* w' u6 C+ k  n% s7 `5 c?>
2 l: z# {+ g8 x' X& b* Y8 L& \4 ~8 [- K( B; Q8 g
A.MYTABLE表中的记录超过1条
+ \2 ~# Y' q) a: O1 w4 F8 Q7 qB.用户输入的数据需要经过适当的转义和过滤
. L8 M; R9 W, bC.调用该函数将产生一个包含了其他记录条数的记录
/ U+ X  D# j# X& S, `7 H* r5 _, l: a# RD.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除, u! c8 S- V+ C; |3 m' T
E.查询语句中应该包含数据库名
7 T: `$ a* P9 I6 ?
1 i! t) `) E& u( z* s: D" Q  r) l2 B
6.______语句能用来向已存在的表中添加新的记录。% B, g( n) M) o/ y' V! n4 X4 `6 M
1 Y* M3 N( Z0 |* \; l% j1 I( A
答案:____________& x2 B+ ~) |, O0 p; R
* b: ^$ ]) V: V" i% _
& O9 d' r1 `* @
7.以下哪个说法正确?! R6 L* a; B7 v; ^0 w1 k: ^" l
) v7 r$ a9 r) H
A.使用索引能加快插入数据的速度
4 [% a! m; H/ A+ EB.良好的索引策略有助于防止跨站攻击
0 S/ @8 {1 o0 d+ p& h8 t7 RC.应当根据数据库的实际应用按理设计索引
- m! {& O, n! A3 a  \% YD.删除一条记录将导致整个表的索引被破坏% ?" l# A" ^9 n- x/ W: p. r
E.只有数字记录行需要索引
$ _+ Z; |9 m$ y6 O/ @) e% c& _1 l$ r4 \* l

! r  m3 g" g4 m# Q& v$ n8.join能否被嵌套?
! _7 @# ]- v: T- l" V5 {/ p) |3 q: S  }" @, L9 V: Z  L; z
A.能
; k2 ^2 o' W5 f& @B.不能& b2 Y7 g8 y, y  {; G* l8 J
, J- F3 E* E# A  v; q
  w4 U) h- t4 h9 J
9.考虑如下数据表和查询。如何添加索引能提高查询速度?% q" \& ~) I. z: x5 q/ h# H9 r8 D

! P' r6 s+ R+ O+ _# nCREATE TABLE MYTABLE () H/ A" j3 X- H4 G# ?3 }- V8 x! E
ID INT,
# A$ ^) u4 ^+ j6 x) s, QNAME VARCHAR (100),% C7 h. [/ T& l1 H; f% S- J
ADDRESS1 VARCHAR (100),- ^# D" _3 }! [. [$ }
ADDRESS2 VARCHAR (100),
/ Q* ]. v7 l. A# A* Y  [! L3 PZIPCODE VARCHAR (10),
. a8 j9 Q1 q) J6 J1 XCITY VARCHAR (50),( e* M, a' d; Z
PROVINCE VARCHAR (2)
9 ]% _9 z* p  T& l8 v- F)
$ C' G1 X: {; s8 ^# kSELECT ID, VARCHAR. E. _0 r5 Q3 @3 U
FROM MYTABLE
* o* ?% X: M  zWHERE ID BETWEEN 0 AND 100" d/ n# e( Z6 x0 ]+ I
ORDER BY NAME, ZIPCODE! T2 l, H8 ^' x7 R. h  m1 N
- O3 t. \8 ^9 h& T6 F3 B$ F
A.给ID添加索引
6 ~1 f, b6 I( _6 ZB.给NAME和ADDRESS1添加索引3 j  k4 I5 `+ U3 e. N- z4 W
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引' I! j& R. E6 R% W3 j  j! T5 L& ~' y$ N
D.给ZIPCODE和NAME添加索引. O% K# t/ Z& J) n% h
E.给ZIPCODE添加全文检索3 a8 c% |: w) R" H
+ {8 c" T) c: s( Q6 j

- O6 G7 l( A! P3 z0 ^+ Q# m10.执行以下SQL语句后将发生什么?1 i/ w2 i, a1 @8 M

" [2 X- h/ g8 ~0 iBEGIN TRANSACTION
. a- W' t2 ^$ F! g+ b5 nDELETE FROM MYTABLE WHERE ID=1
- y! D( i; }' |DELETE FROM OTHERTABLE" `2 K+ ~5 J$ f, i  C, P3 }9 b3 @
ROLLBACK TRANSACTION
, u  d% a0 e. l& T7 T$ N5 H& X6 V' W' ]. J9 c& I
A.OTHERTABLE中的内容将被删除! n" ]% D' X* _. J# \  p8 @
B.OTHERTABLE和MYTABLE中的内容都会被删除
3 B# @7 k. ^2 Z  M2 }7 _C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
( }4 Y7 T) x6 |1 u" a6 ]5 Q. TD.数据库对于执行这个语句的用户以外的起来用户来说,没有变化9 [/ N! Q% ]7 P2 }6 D& U! T( c
E.数据库没用变化- P1 z$ x( M+ W$ k

3 H( H: G1 N0 t; o) N: b
* M. ^/ z" h: V5 q11.DESC在这个查询中起什么作用?5 ]8 W1 J% n$ f* O. \/ ^
; R1 m2 _" Y0 n9 v  Z
SELECT *2 I0 T9 B$ p" v+ I, u) m; E5 g" [
FROM MY_TABLE
$ y" t! Q! I. y5 M2 FWHERE ID > 0
: g% N/ H1 Y6 ?; jORDER BY ID, NAME DESC$ h& h$ h- V6 I( r

. ]* I& x/ X4 zA.返回的数据集倒序排列+ y  N" A5 b, H
B.ID相同的记录按NAME升序排列
' K8 y- v9 c: ^7 Q4 O8 EC.ID相同的记录按NAME倒序排列: ~. s1 q9 [: p
D.返回的记录先按NAME排序,再安ID排序
" E: _1 K. T/ I  ~- VE.结果集中包含对NAME字段的描述$ S. h& q6 Q$ B
3 [) w! `( Q! t5 F. m+ \
0 B6 W6 s1 ~- d9 v. N6 {; o( O* o( X
12.以下哪个不是SQL函数?
+ r& x2 P0 C  h& I* `4 l
  v; x) p7 R) A0 ^. n1 OA.AVG' P5 L- \( Q, G) \0 K4 }. k/ M' @
B.SUM1 |; [6 _7 `. E  p2 L" |2 z2 c. N
C.MIN
, H0 t( H# h' T( h! U2 _D.MAX
6 K0 @9 {6 m, \" ^( J. lE.CURRENT_DATE()% d2 ], Y, f9 d8 i. d% N' ^
1 Q1 i/ B% s( ?! t

3 h5 z  @8 G! \4 \: v# Q* F13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
, Q+ {0 q, C' \5 e3 e0 m& Y! J: a1 z/ H8 z1 g& `* k
A.该字段必须有索引  m1 M1 x3 H1 Z. _9 l; v$ }
B.该字段必须包括在GROUP BY条件中6 n& n0 |+ E% j$ J8 d
C.该字段必须包含一个累积值  I. r+ l( F+ V7 M
D.该字段必须是主键
" d* K8 f) D: h& l8 cE.该字段必须不能包含NULL值* F! N8 `  L6 \1 `" l

' h+ V& e# B- k4 C9 h0 G' c; [6 `% b/ T  r2 e
14.以下查询输出什么?
: C0 l+ o- U5 _! G2 S
6 h# X: y, m6 ~/ S; NSELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
* V/ a# N- \" k7 T) @ON TABLE1.ID <> TABLE2.ID
! p& \" ~4 l! T
7 g6 B: f0 E9 O4 @8 D  N+ GA.TABLE1和TABLE2不相同的记录3 c2 ]" A. i% o1 ~3 Y! a( `
B.两个表中相同的记录
$ l! z9 C: d1 k$ HC.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数* c! j: p5 Z/ ?8 Y2 S
D.两表中不同记录的条数% [# v1 z% j+ M" G& Q
E.数字2; i! U1 g; ]$ P
  g7 I% v# \9 X& S, B

1 Z% G, _2 {+ m5 z+ ?15.______能保证一组SQL语句不受干扰的运行?
. h/ O0 d6 Q) K  T2 n& J6 ?  W6 S# Z, F
答案:____________% u4 N: y) `7 T
" Q6 k# C$ G+ i' y2 f2 k: \

3 B& o% X( C) h+ Y( R. r4 G
) n' u" P- j0 x& E4 v8 K答案速查$ E5 ?8 k2 j) Z% P7 _/ j
1:BC
% x  j+ m2 {( G. U! @  R2:WHERE, ?, o8 e1 G/ A4 ?
3:B9 `6 x$ E1 s% k, o' V, F
4:E
- l; q8 r3 _+ F1 @6 U% I5:BD  f1 `7 Q# o2 B0 I9 \
6:INSERT
% }% H; S0 ]$ }$ O9 h$ Z7 P9 y0 y7:C. I6 P, t0 c  f
8:A
; k2 ^0 u- @) ?' H  J! I9:C; ^6 R& {: v$ F7 e1 ?
10:E1 R: P; O4 M+ d
11:C
& l* Z6 O$ ]0 t12:E
4 s% G$ A9 ~% \% m9 d1 j13:BC
+ @: o8 V9 j( Y6 V14:C
2 a5 A: ~8 [; R% D. R7 E15:事务# p" _2 |9 k; g/ T: A8 c

  ^0 B" U5 |# @1 _
* J5 K, P+ x+ C( `5 Y. U  _6 a4 r/ _9 n4 |
答案详解
/ r  R' }. O' z9 r: [& f( y* Y; Y, j
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
1 x, r1 w( C2 V1 z. ?  R2 ^( z% S3 ]) v
2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。$ P8 ~$ e3 V" Z
( r, }- o7 w  _' u' [9 C
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。; F4 c& o4 }; W
! y, {- A% r# X) V3 f+ i) i
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。* n, E* i4 j& Y- _. B

% m6 W* p1 t% r6 X! d# |6 _5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。& {( u8 L' H" K7 I1 ^

* m2 m% V$ ^# E3 \6.答案显然是INSERT。1 ~+ v( B, j. j7 _" c' P8 A5 l

( }5 |3 w+ F/ h4 T. x1 h7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。* N4 ?% ~% m7 G) H) E  @  O! D8 c

$ C# ]1 |- G+ A9 X8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。* r- U) J; q. t% l

, l2 U9 R' s0 E8 S; N  a+ u. ~3 v5 a2 ?9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。6 H# c: F. [2 |9 H! ?( Y2 {; \

7 f( F+ z0 k4 ^6 o2 ?/ k10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
: G1 u# X5 m# o# i: K; [3 e: c+ _* R0 W. H) Q0 ~" G, U
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
* g! s+ J7 [9 _9 v2 }5 K% k' X0 t. h% K! |) |
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。- S; C# M$ R" u. m' H9 _
" z2 {6 {: q# }9 ]$ l6 ]
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
: O( o: i- S8 c0 b+ q( k; Z; _9 v+ V# n9 T7 G$ c
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。
3 ?1 `. Y. o; J8 G! |/ ^! I
2 R! h) Y8 f5 [- |! y) r  D15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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