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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。8 R' n4 ~8 c0 h' f
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。' D- V# X4 D4 Y' ?5 ]
本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。0 a& P6 ^/ Y2 _9 g: o

( i: o; ^# G$ h( j6 {, w# T' S5 e) X/ _
问题& r$ x# o! W; j/ _; j

6 ^! N8 X3 n) q4 w4 }2 p1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)
7 ^5 y& L) |" R6 ?' r
( `; D/ i2 `5 j, P7 M5 ~SELECT * FROM MY_TABLE+ B0 e" \  B- H% Q, m

. J" Y- A7 _: [/ u5 g- XA.如果可能,用把查询转换成存储例程, U. S. p& f1 J$ w
B.如果程序允许,给查询指定返回记录的范围( ]$ |/ |: T# ]- I& ^" F3 \
C.如果可能,添加where条件
  X2 z/ n3 _$ s) _! _5 YD.如果DBMS允许,把查询转换成视图) J0 H, w8 J4 i. k4 _( M
E.如果DBMS允许,使用事先准备好的语句
. X, ?1 q2 E! p/ L0 Q6 j6 C: I+ q$ s: f% h* W

8 X3 x$ O4 @; f: q: R$ f2.可以用添加______条件的方式对查询返回的数据集进行过滤?5 [: j- K5 y: `9 {4 e/ S

0 s/ E7 j) U. Y答案:____________
7 g0 e. Q8 B. X  X7 _1 Q! b* N, Q6 x' J; s

( e2 F. X3 B7 n0 _, j! ~; u( U3.内关联(inner join)是用来做什么的?
! s, U& f# ~  d0 ?4 l2 x- W5 _+ A1 d% G$ |' M
A.把两个表通过相同字段关联入一张持久的表中2 E* W9 S$ D4 m% ^( y# h) L
B.创建基于两个表中相同相同行的结果集4 q2 r  Y0 a2 O, T$ M; m
C.创建基于一个表中的记录的数据集- X* Q3 b4 G2 C
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集" c/ w3 L. o% J7 E
E.以上都不对
; K! T  K+ {; i8 O0 D/ v' R$ t, G8 H. @1 d
5 G- i; N8 S# b0 o+ c" n/ p' _
4.以下哪个DBMS没有PHP扩展库?/ O1 }. [' {; N) k& G" a0 ~9 F
6 Y/ u+ ]. ~+ b4 O, T
A.MySQL7 m8 g2 g) x+ }1 E2 q8 P2 M5 g6 T
B.IBM DB/2
8 r- k+ S( I2 cC.PostgreSQL' ~, A: O! p+ u/ R9 l; L/ S
D.Microsoft SQL Server8 Z: A0 l+ w" y8 Q% D
E.以上都不对
! _8 h% q4 w+ S2 R1 C# c0 q) h
. {! [; @( u' d( h
* S; ]; j9 f4 b1 t2 I+ w5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
9 t& S& Q6 N2 R4 V0 t
! t6 R; O  G9 H( o+ D. i! R7 X<?php2 v1 [$ f5 \( L' e# v: [( p3 o0 {
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);; D6 A  H' D  E& H4 e
?>) [/ W; u& e' I& ~9 P3 O- R
/ B, ]5 M. c7 i8 z
A.MYTABLE表中的记录超过1条: g, s/ Y$ f  S! O/ H) Q- t
B.用户输入的数据需要经过适当的转义和过滤8 y3 ~+ T$ T$ j+ C
C.调用该函数将产生一个包含了其他记录条数的记录) H% ~  t& f' _/ a4 j- z3 |
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
- |5 z  i+ y# h* C3 KE.查询语句中应该包含数据库名, |9 ^0 _& U3 A7 A" Z3 g
8 K$ X) i' k( w2 n
8 @& C( E- |  L1 `4 Y& r" ^
6.______语句能用来向已存在的表中添加新的记录。
+ @* _" I+ ~: b. A# `! m% }
6 w: N6 C* w1 [5 r% {  l答案:____________3 L& ~4 q% m. s. K7 [) Y
4 u! D( I) [% a. m

+ o% D0 A% m; {5 Q7.以下哪个说法正确?( d; X% t( @0 j% Z: C* s' E

% {4 S+ `5 m  R  ^! ]A.使用索引能加快插入数据的速度7 f" X) G" m' y6 ?  m2 `6 Z9 f
B.良好的索引策略有助于防止跨站攻击
( A2 p# ?9 l' q1 j0 uC.应当根据数据库的实际应用按理设计索引
: k2 F8 B) f+ a- U- t' k/ S- _' B3 FD.删除一条记录将导致整个表的索引被破坏7 N' d6 S/ D3 v
E.只有数字记录行需要索引
! ]1 B8 D  H9 }* D3 E' G8 ]
% s% h9 L# [7 _  M
* ?' F  ^# A- S9 r# `8.join能否被嵌套?6 x! q7 G1 D6 U% @* X. I
7 k7 O. n6 U$ [) Z8 f5 C3 g. Q
A.能
5 l7 D6 p3 [8 W& `5 E1 ^B.不能
* o9 S2 x& e' T' X  Y
6 w6 P" Z. g# f; t
- u" v) `: W6 `- R  u# ]9.考虑如下数据表和查询。如何添加索引能提高查询速度?
9 k  b; q( }2 @6 Z8 ]; m3 O0 W1 m# \2 m( R
CREATE TABLE MYTABLE (! P& k' C7 T$ ~$ R, x
ID INT,
5 K- }& o$ D% Y8 i4 U1 E, E# sNAME VARCHAR (100),2 c5 b9 `! u! c5 G- R# ^
ADDRESS1 VARCHAR (100),
* @0 H4 ?2 X5 V" @8 d# }3 o' OADDRESS2 VARCHAR (100),
( s9 W; T+ J( w7 {9 D4 eZIPCODE VARCHAR (10),9 d* D4 i: a2 J- S# G; G
CITY VARCHAR (50),/ n7 [1 X2 E( X1 S
PROVINCE VARCHAR (2)/ Y  N  w9 P- Z, F* }- d( z
)/ O) J9 c9 n" X" `
SELECT ID, VARCHAR
8 K6 `) U5 t" E  L% `+ L+ s6 `FROM MYTABLE
1 P4 ]  H+ F# {2 RWHERE ID BETWEEN 0 AND 100
3 g& O8 S! W6 G: R+ Y- IORDER BY NAME, ZIPCODE
$ T8 [! g; k: l" Q4 b9 z
; o( P  i0 `' z2 u* X' v. wA.给ID添加索引, J- b( |' V. X4 d  s
B.给NAME和ADDRESS1添加索引
/ h# T) |( p% F! Y+ DC.给ID添加索引,然后给NAME和ZIPCODE分别添加索引0 x$ {5 k: L! E
D.给ZIPCODE和NAME添加索引
  ?  ?& |% {  |' e1 `E.给ZIPCODE添加全文检索
1 `$ L. U! J" X) B9 A  m* d
7 P3 D% K6 x5 v2 @1 T- U* y  u( u+ v9 `, j$ p2 p7 g; h- p
10.执行以下SQL语句后将发生什么?
3 L0 S2 N  P3 ]! i+ o
* \  Z  ?# W7 b2 s9 N5 P4 B! wBEGIN TRANSACTION; s1 u; B" B7 O7 v1 w$ r8 O
DELETE FROM MYTABLE WHERE ID=1
1 \4 e; u  o, Y$ p! ?" eDELETE FROM OTHERTABLE
2 I) S3 L( H8 L! x8 T1 [8 e  S  [ROLLBACK TRANSACTION: q2 G% A$ D% R3 \# E4 q) r
+ m3 Y' W9 S4 D
A.OTHERTABLE中的内容将被删除
6 \1 d- d$ F2 x% QB.OTHERTABLE和MYTABLE中的内容都会被删除
& \) S3 U& G" R0 q* j4 QC.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
* V( |2 b& K4 L4 j( n2 MD.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
5 N3 O( a2 o  H. k+ _/ S2 oE.数据库没用变化( p! s. p2 @5 A% L, p0 V3 \

1 k6 p0 s- E  ]  l. U' J+ Y; D$ W: ]" n0 y5 s
11.DESC在这个查询中起什么作用?
' z; ~* d, z8 l  o+ T& s% d& L% }( b
1 n5 ]. J2 W3 ~8 c! T0 ISELECT *
4 R" p6 A( X, s; IFROM MY_TABLE
4 U/ Y2 P) Z- r% M! S/ ZWHERE ID > 0) t  K% S6 F- y+ O& b( D  i# |
ORDER BY ID, NAME DESC
! l' q3 D! N* V! x$ C+ D) ]7 h" i
$ K6 [- m/ B. j; LA.返回的数据集倒序排列5 E1 N& O' m6 g& H* L
B.ID相同的记录按NAME升序排列: m$ U2 d) C$ ?4 y3 o" ?
C.ID相同的记录按NAME倒序排列/ U: f1 z0 x; r% b; a& `" W
D.返回的记录先按NAME排序,再安ID排序0 u( J# I' k8 G# z+ W! `+ Z
E.结果集中包含对NAME字段的描述
% l; N9 z; t% ^/ y: B
8 s& Z! f; V( l6 L: Z0 B/ F; i6 y) B1 B, I
12.以下哪个不是SQL函数?- W- l1 ^- Q' n' O& Y

' `  s& Y" H: Y+ \9 GA.AVG1 m* X( E+ Z; W' `' q, n
B.SUM6 f4 ]2 @& ~6 V5 I' {& a  N
C.MIN+ {" [, L+ J. |4 J: E: j& z) ?2 S2 l
D.MAX/ k5 A2 V. ]3 q& i
E.CURRENT_DATE()
# i+ h4 W# s" B3 ^& J3 y$ ?2 O5 g1 s; V

8 M' n! c( Q* S" g. ~* ]13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
" o7 ]! Q, @# _/ f' Q, D4 I3 T8 e2 _% J, \& Z. |
A.该字段必须有索引; C, ], ~% A4 J' X, w' j4 X
B.该字段必须包括在GROUP BY条件中# c, o% v# Q: R) e
C.该字段必须包含一个累积值
8 |( S( p$ Y6 z+ ^* g. Q  [" dD.该字段必须是主键
! a; s) X$ d$ H6 c7 P) F6 [; `' LE.该字段必须不能包含NULL值4 N. {$ [  n. A! O) d3 u3 Y; c

( S% k' {, ^  ]
0 ^: K, Q0 H. A4 `14.以下查询输出什么?. p4 f& t, \% n' j. K- q  K5 i

3 q- _- A; K5 M5 w* @SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
! Q) B  [# N2 [, u, T, x5 G! GON TABLE1.ID <> TABLE2.ID# j6 ^1 }/ D6 [8 A/ t  t
# H! p! Y+ |+ }
A.TABLE1和TABLE2不相同的记录
$ j) _* T. d2 g5 DB.两个表中相同的记录* h+ T& U* \! p# S: ?& i; ~
C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数# W* ~9 X! _! q/ Q
D.两表中不同记录的条数
) o% g( v9 Y! S2 c4 ^7 I8 ?# y: p1 hE.数字21 ^+ a+ j4 T4 \: X! @

2 H* G0 C0 C" g, }" |5 \, P6 P7 d
15.______能保证一组SQL语句不受干扰的运行?
  L- G9 q! h9 V( Q# n4 W8 L
( w3 S; L+ h' y8 j! c答案:____________+ s+ c& _9 X4 f9 r+ U
1 G. G- L- l! f) y& M
6 L9 w9 A$ S3 {8 F! H

4 k8 F1 U2 V& K6 u答案速查7 {% @8 Q+ u% e8 m$ w4 K" f
1:BC
# A# t2 Q2 ^. \3 i2:WHERE
: y/ P. d3 R* n1 z& g+ [$ H3:B7 e9 ~# i+ B# _4 g
4:E, P( e- |9 k5 @# I8 g
5:BD
# `6 h; ~% O( I; J, n2 N- h6 c6:INSERT/ o% t& i$ y1 D
7:C
* h1 ~( ^2 [  ]+ H* Z$ n/ |- v8:A
, m: L5 w$ k9 d3 D5 x9:C
/ H9 |" L. ^: ^10:E9 d! f' W! M& c3 }0 I$ _/ W2 I
11:C
2 |  |( k% N9 ~( I" M12:E3 F0 a$ S; N+ f7 L& f! n+ G
13:BC
# x5 P$ Q/ [, m2 o14:C1 K! Z, ~3 u' z7 q$ X  i& B, ^
15:事务
8 U8 c1 R7 [% w9 B9 l% N, l
0 U( E! g1 c+ ~/ ?. C% A7 u) l! R" }1 S5 w0 z( C
! W) E8 F  Q+ A) A% o: e5 O
答案详解
' l5 L( u5 m2 c
# O) s  H) b8 n# d% G4 {& o0 D1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
" n; ^- r6 r8 G2 X' [9 D$ M! n3 t8 d
2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
0 o( k$ e4 R/ F8 t! D
# p4 r% ]+ r' j2 V0 ~3 k9 `) P$ c8 _; j3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。9 |+ h. u9 D  ?% b

+ @+ Y8 o6 ?$ s6 ^8 \& G) s& k; _8 o4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
( |) U7 a) `0 v  l( U* w, T/ \( x6 _# ~6 X
5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。
/ p" \7 y, r: z$ S1 m/ L$ \3 x
6.答案显然是INSERT。8 Y4 l1 d$ W) v

1 J$ H' g( |3 r) K+ `3 G7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。. q* b/ b6 m7 l1 a6 `* X; \( o
% s6 K: P5 Z2 i4 o, F! s+ Q3 |
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。* }! r& h, u) e# L& x5 e

/ L; J0 ~, u8 f, C1 ]9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。" S0 Z) T: }8 @8 m- o5 A3 c. A
/ _6 {5 ^5 H* R; u6 ]& _: c# c: q6 X
10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
& A: I+ m3 R( D) @7 r5 B4 [/ ^/ t1 ^3 K6 c) J
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
+ P: y' K3 I1 W$ u5 y% G: X) A8 M7 ]0 w- u7 X, a
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。. e; g5 I2 X/ a6 X/ n2 T3 \: ^
+ F6 w; j; B( `/ m' w2 a+ t
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。8 z4 w) z# F4 B; s5 ?
2 k4 n% ]7 o5 r0 o
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。
8 W" \0 X# |) V: k6 \& q# s1 _
7 Q0 j, W- G/ v( T+ \6 a15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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