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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
% W$ ^/ q0 v( yPHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。5 [$ n' {  L9 ^) [
本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
# L% E; f$ Y/ I
* U8 s* c6 I9 e8 P, ~
- b5 ?6 q/ b; C6 B) d3 Y! F) ]问题5 F- c# M( @) n. J
. j& `# L  M; h6 w" W: y
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)2 i8 e- A* F" L* n

. n3 C# ^& \; i5 b) CSELECT * FROM MY_TABLE
1 L% g2 W1 B$ A* ^6 I' V. ~* f' _; C& C  q% l! o7 d
A.如果可能,用把查询转换成存储例程
( d$ P: l. @/ l1 ^8 z1 rB.如果程序允许,给查询指定返回记录的范围7 C8 W0 v- W9 W, s' g0 @6 U! A1 ]
C.如果可能,添加where条件
/ k" v9 j4 D; X. J/ x* HD.如果DBMS允许,把查询转换成视图: n6 z; H! ~' B! K
E.如果DBMS允许,使用事先准备好的语句
. A4 [# N/ Z7 j) {& T( h, A3 x% X% n5 l' D

7 Q7 J3 @) z, H1 ]; S2.可以用添加______条件的方式对查询返回的数据集进行过滤?# v0 ?  R& D- |  a

) f2 M8 A  S4 s: y$ O% S+ w答案:____________/ l9 @" W! W  u% P8 n# B0 m
7 ]% [0 K. R, _  a5 ]4 I
# Q8 p2 w7 g/ R/ b  }3 U. I% t% O% d
3.内关联(inner join)是用来做什么的?
( H: m# `1 j0 X6 r4 {4 E( E$ y/ ?3 I9 c  M
A.把两个表通过相同字段关联入一张持久的表中
" `" S1 \# _$ u+ x" H, }B.创建基于两个表中相同相同行的结果集( |/ p5 e) R( M$ R) X5 E& b) Y
C.创建基于一个表中的记录的数据集9 d8 d( D3 F5 n. \: a5 M1 W1 c1 M
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集
8 n) t8 a4 l% ?E.以上都不对
0 \6 D( ]1 l8 K; Q8 ^! d/ }" T% ~: q/ W9 `3 D2 h% ]4 k3 r' E1 R

5 {% g# p( J( v3 }4.以下哪个DBMS没有PHP扩展库?
, _. B1 u/ Q* c' {2 W. [2 F) N- f
+ @" Z0 K1 k9 m/ O7 J$ ]A.MySQL
& s- G. w: {( ?" N. q* NB.IBM DB/28 s$ o) Q- @/ q3 c
C.PostgreSQL
" ?0 R& \; z* k7 p, k- ^% ?" L6 v& YD.Microsoft SQL Server5 h5 U8 t9 q8 X9 \# o, c8 @$ o5 o
E.以上都不对
8 O: T) K, O9 W! c$ u0 ~4 ~: ]# J. u  y2 _9 E+ v. W1 S  @$ P
: l1 b* I5 b/ N2 B1 V9 [1 Y8 y# _$ P, i
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)  R! o' D0 K, i  F; i% o# s6 ^
+ q' _. R- D* E& k% E
<?php2 Q: {. i* B, q0 S5 R
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
9 C5 _- f% L0 X. E?>: [' A* [3 P/ U2 F7 G6 l2 I

- Y2 q8 W' @5 G; e0 }: gA.MYTABLE表中的记录超过1条. ?2 S# c2 @; ]! {5 a' W1 L6 T8 f
B.用户输入的数据需要经过适当的转义和过滤  X: H; }9 w* t) f
C.调用该函数将产生一个包含了其他记录条数的记录
; n* M+ w/ ]  M* cD.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除: u+ x5 ~" k& c# q! \( B* _
E.查询语句中应该包含数据库名% ]" d* o/ a  k- }/ S
7 S( t5 _( ]' t8 ]4 J9 [

6 u1 E' {- p) ~" i) R6.______语句能用来向已存在的表中添加新的记录。; j, x2 _* B8 o  D4 Q* C4 l  o$ W

" M6 Z/ O2 t9 a7 n& d$ X7 w答案:____________
. A  e7 h" q: `( M
6 \) Z5 }. S& A% D/ `' e4 I9 E. @3 E3 k; l' R4 E
7.以下哪个说法正确?! y2 m; w6 b4 {* W8 Z: G
, @! [. `  v5 i$ L" l$ _
A.使用索引能加快插入数据的速度
( Z4 z6 s' M7 }' ?' sB.良好的索引策略有助于防止跨站攻击
2 G% ^; g% G. y( O8 a1 n3 ^C.应当根据数据库的实际应用按理设计索引
; S2 m; X0 N- MD.删除一条记录将导致整个表的索引被破坏
+ U3 J& p" O* ]4 S, d& u: L: E9 NE.只有数字记录行需要索引
9 z8 @9 y+ W6 P) B4 q! y0 G( Y3 j4 w1 y! A+ W) j

( R% A! W" f* c1 F8.join能否被嵌套?
, V/ \7 V% j: o( h/ G, t
$ I& ^% c& V7 K& ]- zA.能* I: G) s3 E+ Q$ j* K  c# Z" V  r
B.不能
. X% n3 o; ^; F8 U3 T9 _: G7 _; v: o6 R

. @& \/ y) J2 f8 h9 b1 q9.考虑如下数据表和查询。如何添加索引能提高查询速度?
9 k- \" j4 L4 D* V+ G. q5 y1 O
$ }% ?; u- y* {* R/ s( ]1 fCREATE TABLE MYTABLE (8 b* p" ^1 m% r2 |
ID INT,
; l. g0 H; D0 l6 v+ P+ L. B( G9 ~NAME VARCHAR (100),
& P5 w& p, G& b) Y9 d. cADDRESS1 VARCHAR (100),- [" P4 ?8 R$ a& ]4 \
ADDRESS2 VARCHAR (100),
# [+ w( \" K7 R# f, jZIPCODE VARCHAR (10),) `2 {6 |0 h5 o! V3 D; @# X7 S( q8 H7 _
CITY VARCHAR (50),
- E& g5 ]6 K! B: ?0 @3 f$ ^PROVINCE VARCHAR (2)
5 w+ t4 M2 @  B% m! s: _* @& p)
3 h0 q# M. Y( V( v  jSELECT ID, VARCHAR% p2 b. b& z6 k- h2 Z( l
FROM MYTABLE
. }" H" J1 t! GWHERE ID BETWEEN 0 AND 100
/ M, e' s! {2 M+ D* hORDER BY NAME, ZIPCODE
( o( J9 c5 Q1 m% h" K7 `3 n+ w# A0 {$ b; B. a4 \4 h! }
A.给ID添加索引2 t  Y$ @8 S, a& _% {" X
B.给NAME和ADDRESS1添加索引, B$ i  `& j3 s% z- l+ Q
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
5 x4 [: d, `; u7 ~; A) W7 _D.给ZIPCODE和NAME添加索引
# O( h0 n8 {$ ~8 n8 V* Q/ a( g( DE.给ZIPCODE添加全文检索4 }5 @5 D: G  v9 t
6 K1 q( n& ?: I! |, A
4 ^( [5 Y7 ]8 [+ K9 ^7 h' c
10.执行以下SQL语句后将发生什么?) \7 Q! ^" [1 a7 ^" O5 {9 h$ F
# x$ ^& `8 r* N* N6 U2 Z
BEGIN TRANSACTION
) L* Y7 S0 v/ o  P% D0 FDELETE FROM MYTABLE WHERE ID=1
$ G2 }' q$ [' QDELETE FROM OTHERTABLE7 J( F1 w2 {7 R0 p7 G+ r
ROLLBACK TRANSACTION% b5 d* R4 z, L" N

  d1 ]2 {2 Z! g! }- l9 HA.OTHERTABLE中的内容将被删除6 ?' |$ B1 b! b2 n
B.OTHERTABLE和MYTABLE中的内容都会被删除' o, q/ _( `1 c/ u+ m
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除6 E$ ^5 ~5 e$ Y' b; t; A, M
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
  f# g# v  o5 Z  s6 y& nE.数据库没用变化  Y) _  q7 H3 k- ~' x. c" {

# Y  G  Q7 E, x$ F! s4 J# `/ P- W$ G' s1 [
11.DESC在这个查询中起什么作用?
5 T5 s- V$ ^9 k+ H' K  r, v, z
% f# `2 E& T% p: M+ JSELECT *) p0 X) |9 z5 e0 o. R; |2 c! G: I
FROM MY_TABLE2 J& I) `1 Q; B; h8 j: G
WHERE ID > 0( ]. j; q. H, _) }
ORDER BY ID, NAME DESC9 Q( D% j) d3 @- D1 `6 }  s
" T. B& X" N1 b7 a4 G) E, |/ N
A.返回的数据集倒序排列: n1 `9 z1 \2 X5 B% o
B.ID相同的记录按NAME升序排列
) E: w. x2 e9 `1 Y" E) y5 K; ZC.ID相同的记录按NAME倒序排列
  r( C# {  A* t1 d' }D.返回的记录先按NAME排序,再安ID排序
7 @6 Z8 d& P! u  {4 UE.结果集中包含对NAME字段的描述
) X& H6 S% d" a4 V" Z  d' u; N, }8 D

$ I, s' p% s* q+ q2 h12.以下哪个不是SQL函数?
! j, B$ N# K2 a( W$ b! q' w& I! ?2 x2 E6 E, l/ V8 W( {
A.AVG+ }8 |8 d  ]& w1 {3 n3 F
B.SUM
+ Z5 o+ }6 t2 aC.MIN
2 d2 N: f" g% g: M! b2 R. i4 kD.MAX+ z3 I: @# L4 f# T! u
E.CURRENT_DATE()* m; u! `8 j4 Z% Y) j! P8 U/ l

3 S7 J4 {3 K% D0 _7 y! j- x  h: A
- _2 w: a5 T* L! i13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?6 o. \9 ~9 Y( c/ |
# |/ q2 Y6 C, C9 p
A.该字段必须有索引9 H# j$ g' r; t0 l- X2 L3 G
B.该字段必须包括在GROUP BY条件中) U; I3 h0 A. z3 w( ^3 E
C.该字段必须包含一个累积值
: n$ b( L5 ^6 N2 p$ P5 Z1 jD.该字段必须是主键
" U' ?, d, u# XE.该字段必须不能包含NULL值
" E  z$ k. G" R/ U+ L" M
3 z# }2 _& m+ A; r+ q2 T: L
$ `: C1 J& V1 d; J14.以下查询输出什么?
3 s0 ~, W6 A! a+ p5 s7 r5 S( r4 m; s$ P  q+ t; K$ I4 o  h
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2  {3 L' y4 u6 l
ON TABLE1.ID <> TABLE2.ID1 F6 X) K" o& r6 P. A1 P

* N' @4 w: L* A, ?( R% i# IA.TABLE1和TABLE2不相同的记录6 I1 Q/ {) Y6 E, Z! d& E" d
B.两个表中相同的记录  e" i1 r; P; j$ M% ?+ b, K- x; m
C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
( {) U- T. Z) a4 x2 V* X9 L- cD.两表中不同记录的条数
& N* _9 L5 L3 ?; g* s8 `2 RE.数字22 S7 T4 K% W* r. p

/ ?( \  W7 _# u" M- u+ e. I2 w1 {' i& n
15.______能保证一组SQL语句不受干扰的运行?
" m2 a* w; Z" c1 V& f7 H( h2 a% s* \/ {& Q: k- l! f4 I
答案:____________: J/ \2 C6 S5 b

6 Y; x$ _" ^9 O0 o( P6 a3 W0 L2 i# k2 B/ B, D, X4 o
. j) X9 N2 ], {/ G
答案速查: `. i: k3 d9 P$ ^
1:BC+ u  i( s, `/ \8 Q- C! E
2:WHERE% A; x, C/ T( w. z( t% y: f
3:B
' w3 h! L* e/ A  h: D" F1 p4:E
9 p7 M- W8 n4 Y5:BD, a2 ~$ L/ J, f+ f
6:INSERT" x2 s4 y; X( v" T" B( x. r" u6 N% p
7:C. f! O$ D$ u" y' r) a5 M
8:A: v9 S8 Z0 G# `: Q1 L
9:C4 s6 s8 g- W: }2 L* U6 {
10:E
* r% c( k) G  @" w5 E11:C
; s6 k0 p7 J) b( t" }5 {12:E& I- o; \- V7 ]$ v9 s
13:BC
! H8 J' S6 e9 a/ a14:C% _. U4 K, W  A) M" `' H& }1 T
15:事务$ ~, ^3 f2 P0 g

0 i/ n( t3 Z: s$ x7 H( Z/ k4 P0 R' }. _% M6 i: M
6 U6 e8 x; A$ Q1 S! h/ U& F8 c" }
答案详解
2 l" D! {1 B. m, \9 O4 ?# k; z1 Q6 {0 D1 c" Q
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
( L& m# Y. A# I- T) h" p5 F7 D& G* Y% C9 j- n+ V8 a( r
2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。& L  u3 v( \) ^
4 Y" y6 P: @2 E% l- f
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。, |7 L9 G' w. L
6 ^) v- l; B0 m$ {: U
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
% T, |- E7 S: {" W# {# Q# \0 N: m9 p
5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。
+ n" u9 l0 `1 W) Q; A: Z5 d; T( U, ?6 [
6.答案显然是INSERT。
- d, z4 u( r" Q* }  o
) D1 @1 A$ s3 G. d7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。, o* k% f: L8 A4 Z0 u$ Y

# f% S# k: v2 l; N$ i8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。  B. j) r5 N; k" f! ]5 L- u% K) y
) f/ }# k" [8 w& r1 |# y
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。6 @" k8 k9 ~+ t

3 A, Z8 v* q/ z/ ^3 G/ p( b10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
. v) W/ r( H/ ~% a/ P0 H# A
9 A3 V- j; [* S- K5 }2 I! p; G11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
' P' L: Q) Y5 j) k; W+ f$ y9 l' o& [( H+ P) x: s
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。0 b% u, W$ E  J8 v/ L1 k& N4 @

4 Y0 X8 i( F1 x2 w* i# m2 G13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。) M3 D$ W7 z) T/ W& S4 ]% N% V
5 c4 s3 V$ Q5 J% B! g
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。5 r5 Z) r. X1 o$ I! e

* f, T1 A$ O, z+ l6 L& ^6 s15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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