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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
7 _  W3 i* S: D0 S2 OPHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
( ~* C8 x/ m# E  V/ |: Q& L本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。) y& O) _1 s$ q# X  j: C6 T
$ n# f; S* [( w, b
# Q" v% R9 ~3 ~4 ^
问题' z- ]. w$ l2 Y& `
; a* y/ S* v8 Z* L# h. w
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)
' S* Z+ X( E: d' s# G
% J5 N$ p0 g0 t( z, RSELECT * FROM MY_TABLE& q( c9 z6 D2 Z
% E( K9 q7 t3 z* x4 \
A.如果可能,用把查询转换成存储例程) o6 R8 D5 t* D+ a' I; r
B.如果程序允许,给查询指定返回记录的范围
/ ^9 `1 {. Z: t+ g! d8 |; ^. J7 UC.如果可能,添加where条件
3 b  x* j- l: W+ VD.如果DBMS允许,把查询转换成视图
2 n) {8 p! \" t& AE.如果DBMS允许,使用事先准备好的语句% B: U% K9 K+ k# r

, t; u8 y8 g, S! Y* s
4 i! d, ]: Z) w4 x! F2.可以用添加______条件的方式对查询返回的数据集进行过滤?5 w8 O  m1 \1 B- ~
$ Y$ A- O. D; u' b4 D8 C" Y+ x7 A
答案:____________3 G4 n0 S$ U- y( {( j1 Y( r4 ^
3 X6 u5 D& Z% `2 W  y
( I6 K& N3 e6 H5 T- U
3.内关联(inner join)是用来做什么的?
5 G# X! y3 x% d) t: W4 R) u1 O) |2 C: H0 v
A.把两个表通过相同字段关联入一张持久的表中
7 S% D8 e" a" e& v: k0 |4 kB.创建基于两个表中相同相同行的结果集" p. V% p) Y1 S) K: g9 c
C.创建基于一个表中的记录的数据集: m9 \1 g% H0 [
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集
4 i# O5 [; K  K" LE.以上都不对4 j$ l" G! ]& ]& \- a# M, L8 N
# a; Z: Y4 K9 W8 q  m* {1 |+ q0 p
+ L' A) C( N4 p- a; r; {, ~
4.以下哪个DBMS没有PHP扩展库?
6 @; J0 d& h# P. ]( I0 K4 s4 d4 _' b& \% k9 `& d$ b  t
A.MySQL8 u" t" t- \3 E# e/ [
B.IBM DB/2
" z1 u8 @0 d+ pC.PostgreSQL
- f' s9 D! V, J! V; a/ L& e# OD.Microsoft SQL Server& T/ F/ b5 k  I0 e, B
E.以上都不对' z0 ?; w6 ^: x( A* O5 I
) P9 e3 D' z" p) C9 q' p

8 _/ Z4 S$ F! `3 ]8 r7 X0 h) T' \5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)- ], A& [1 u1 B3 a1 C2 a; n
+ \" Z4 e/ [2 e$ M
<?php
2 E3 M$ I2 U7 M+ I) @4 A* m" i: ~& O$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);2 F, P( Z  j  Z3 I$ O0 o6 _: k; _: |
?>
4 x% [2 R( g2 M& j1 B/ H) D5 P9 A; S& Q1 |2 [1 g9 P
A.MYTABLE表中的记录超过1条2 {: D3 o- Y% x; W
B.用户输入的数据需要经过适当的转义和过滤
3 h1 L/ }( c% X7 N' x, XC.调用该函数将产生一个包含了其他记录条数的记录
& j! ^, i  Z, U: q& n3 ED.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
; f1 b: f7 L2 H" F$ z4 uE.查询语句中应该包含数据库名4 t2 p, e' t) _; H1 \
! n) I  e# Z+ I9 B, F. k, _
  A- G1 n+ k7 n
6.______语句能用来向已存在的表中添加新的记录。
' n2 H# J# K$ X
; N7 ^( r! T1 g$ V) a答案:____________
/ M! f9 {, D4 [9 O
" y1 |- r2 Q  d4 I8 Y
5 X! I8 Z/ f+ {- Y7.以下哪个说法正确?. l; j  v5 \0 {! r# D" h
( \: x6 J+ W  ^) t
A.使用索引能加快插入数据的速度
  z. O) I/ _6 d% }B.良好的索引策略有助于防止跨站攻击
/ R/ U' ]+ j" z; V) \, K6 ?C.应当根据数据库的实际应用按理设计索引
4 m7 m! B& F# zD.删除一条记录将导致整个表的索引被破坏
; z/ w. @2 h7 m# j! ?E.只有数字记录行需要索引
9 f3 W& Q- C/ d
5 q+ |8 a8 e# p1 k- i( a
) \0 z/ M# T+ w7 g0 L/ E0 c4 b8.join能否被嵌套?" _2 V  O4 s2 X

1 L9 @% g4 V( HA.能
7 t+ o0 o: K" P- dB.不能
- c$ w, l3 n' @& L  \& Z
4 J: H+ k4 P! g: B8 u, O' \, Z
, p% q( w7 F% i! o# d0 h. z8 P6 w, X9.考虑如下数据表和查询。如何添加索引能提高查询速度?- ]% a6 s) b6 Z6 m. @' T* n2 o

$ Q5 W+ Q) e5 x1 Q0 E+ ~CREATE TABLE MYTABLE (5 ]3 [% I$ ^% G# V- j& N
ID INT,8 l' A! e" f5 l4 ^; ]
NAME VARCHAR (100),
! q; o4 ~% c/ s7 l) y: l$ fADDRESS1 VARCHAR (100),' f; x% t& m' G6 S/ Z
ADDRESS2 VARCHAR (100),
& d7 B- h3 t0 z5 N$ o2 dZIPCODE VARCHAR (10),0 a9 F) G+ e1 A* P0 q5 l1 n
CITY VARCHAR (50),& \0 o3 D. ?$ p8 k6 f% J, z( o* ^
PROVINCE VARCHAR (2)/ v: {/ Z+ W3 O6 \$ g1 a
)
! }' k# l4 Y" `2 V" {$ C, @SELECT ID, VARCHAR! M% e  ?3 \6 Z( ^. r
FROM MYTABLE
( f. v; f$ E. |/ v, W) p# ~WHERE ID BETWEEN 0 AND 100+ }( w, w/ e4 f
ORDER BY NAME, ZIPCODE
7 R, i- z' D' |8 G0 M; G: b  ]6 D/ C0 b# _2 ^8 n
A.给ID添加索引
7 v5 q9 c. r' E; d! r7 t( hB.给NAME和ADDRESS1添加索引
/ F( C) i$ L) L8 fC.给ID添加索引,然后给NAME和ZIPCODE分别添加索引' P- N$ V5 C7 t
D.给ZIPCODE和NAME添加索引
% ?8 h! n. K, }, p9 cE.给ZIPCODE添加全文检索  _+ w6 P; N5 U; G) N: J/ B# ?; X
' R$ W: U. V+ x  O8 x! R! r

/ x8 `- R$ {& q8 s10.执行以下SQL语句后将发生什么?
! ^& P9 l! @+ A' ~! n/ D- Y) y( u8 R2 S/ _8 \# S& a$ h( w
BEGIN TRANSACTION# u& o3 @3 a# V6 a
DELETE FROM MYTABLE WHERE ID=1
' S5 L6 n- g2 h9 Z% SDELETE FROM OTHERTABLE/ d3 U1 \! u- d' _+ P0 U" g
ROLLBACK TRANSACTION6 Q/ l0 q% o& O/ a) B5 j3 j  N4 a

, d3 x$ {; ^1 a* V; vA.OTHERTABLE中的内容将被删除8 n( N- u, u0 g; W# f+ ?
B.OTHERTABLE和MYTABLE中的内容都会被删除
8 [, z$ f8 W. U1 \$ _( q! O" eC.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除% Q: q2 y! V, _& e. M
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
& h8 {+ v0 g9 {; iE.数据库没用变化. v# J* s$ m% P: _) z
% i8 l. k0 c$ p6 M3 T4 f
, E, [5 D. Y; _3 Q+ a1 b& h9 o
11.DESC在这个查询中起什么作用?6 o9 |/ @$ W) f3 S& H# y4 N/ ~

; T$ C$ O& ^( p: A" E- J1 l. {6 P4 G7 ]SELECT *
  H3 L' H( D* y+ a& MFROM MY_TABLE' e6 q7 L9 O" j) @
WHERE ID > 01 S9 v1 ~. P- E+ H. k+ R
ORDER BY ID, NAME DESC) x, M: @& c& A2 r" s6 V% n7 l

6 |; Q) \( `" y: B2 m( z  t/ J" Q7 uA.返回的数据集倒序排列
. e" Y: T) v/ N- s* S1 O6 A  LB.ID相同的记录按NAME升序排列3 O. T& c' t7 V: T5 t
C.ID相同的记录按NAME倒序排列
7 \  r0 Z( v7 L5 \# L$ j+ U( iD.返回的记录先按NAME排序,再安ID排序* o4 F  _: n. d5 r; I
E.结果集中包含对NAME字段的描述- u1 R) K- a- M* P0 h6 E
% |4 }5 ~0 q  v0 i" w
) P0 p! K9 X1 j6 P* o
12.以下哪个不是SQL函数?
0 A. e, k) W- H' |9 M$ w# f6 p1 ^, A" g: o$ ~
A.AVG2 B+ B. K! c3 R8 T# C; l6 f9 R7 }
B.SUM
" T* F' ]9 F9 Q. cC.MIN+ ~6 ?8 z1 d7 v
D.MAX
5 n6 W2 f9 E' ]E.CURRENT_DATE()
2 `/ P; N( o* Q" s
2 ]/ ]  F1 b( c& j/ {
8 ~! T- q, g+ A( [0 ?13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?  m0 p- l" N; I3 Q8 n+ |# z

. J5 W& i& Q( p- O4 SA.该字段必须有索引. ?9 o# o+ c3 M9 a
B.该字段必须包括在GROUP BY条件中
( ]. q- b4 A3 d1 pC.该字段必须包含一个累积值+ P. B) J; r4 H" s9 D7 s
D.该字段必须是主键5 a* x3 X8 C/ F8 p- W( N$ }
E.该字段必须不能包含NULL值
. y! ?( W2 ?. F2 u, N. ^: o' W0 @, p& N% m# M7 a
9 T, X* a% c+ C/ s+ Q
14.以下查询输出什么?5 @1 i& D( l. p! m

/ k5 u- i% o: k/ F5 ^5 DSELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2; y3 k+ C0 p1 {( w  d5 Q
ON TABLE1.ID <> TABLE2.ID3 e/ u& ~0 @& O2 ]8 R* h) \) E

+ u6 i! W+ g/ x# R: pA.TABLE1和TABLE2不相同的记录
8 @% K: C6 K+ s: ?: k& W2 FB.两个表中相同的记录
  X0 C3 Z. _6 T# J( NC.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
& u) T4 Z2 e- p* g! O. WD.两表中不同记录的条数
: ^8 D! V* m! b0 r9 |  _E.数字2) H0 ]0 e# a% e1 D% q2 O- U
) ?/ P8 `- x0 D

: b' ~" o# {: s15.______能保证一组SQL语句不受干扰的运行?
( ~' Q2 Y0 {* u; q1 D$ F3 u
7 ]) ]# H) a! d1 [9 Z答案:____________: a' b$ g$ P6 ?8 H+ w
+ k6 f& P0 `, L: Z

+ B9 Z; G0 a) S$ D) _) S! t8 S. V' z! A9 P9 D. [/ s2 D( H. T' z
答案速查
! A" [! k) f0 ]7 X  u) _1:BC* e" H+ V! v- Y) O6 b7 \
2:WHERE; _6 P% G# A9 I
3:B  W+ ^7 \  ^$ S) U& T* t' H
4:E
) J. g! I" H& j; q  E5:BD
: J2 C8 i% Y3 L$ a' v, E6:INSERT
; q% i* b2 p7 v2 Z7:C6 V1 A2 l% e+ ?. J' `& _* o% a
8:A# |7 L2 @3 W/ ~4 V
9:C
9 N- x5 _. e4 a% i( n1 k9 ]  r10:E
; h$ Q) m1 M' e# _. L11:C! F& c! q( r2 K0 {1 {) s
12:E
; n( I1 \" Q* |1 R13:BC
# L9 [( D4 X6 v$ C14:C
6 w" v" l9 C. d1 `15:事务
+ M* t' H% b( ^  G( y2 q* w! }% V8 s8 z0 G

. @8 \; h# X; o$ A+ Z# @9 t0 ], r) z" s- M% w' t' C
答案详解0 J! o: C2 g- R  y. \! o& G9 d
5 v) e4 v# Z" @3 ]7 Z
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。! U, k. ]5 o' K8 {
% e9 W# p$ r  v4 g' Q  j! D3 z( k, O
2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。$ L1 y4 ~8 }6 P0 _( S

8 \, K. H) B  G# l( o; a  m2 Y3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。
) I- c! ]% }0 k3 w! m; W; x  e
# a3 S" Q- n0 Q4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
2 y: ~4 G4 Q* }# ~" g6 B
0 E4 D. l3 t, Z; \8 K5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。
$ s4 X4 t% t( E2 P) l  @
, W8 S4 o) H! Z/ Q5 O6 F" y8 _6.答案显然是INSERT。$ k7 A0 |; S% y5 k  F) G

9 R% A' O+ Z) P* i( C7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。, l+ r% {5 `0 x2 g8 ]$ H
& {4 U8 y" S- D' y0 I: B/ e1 Z
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。/ h; |, P3 \+ i, e

) X' r! v2 S& N* {& g% z& Q/ X4 j7 N9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。7 y5 z2 ]0 V5 y, _

0 N4 W8 k+ I( R10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
/ ]. a' @7 m  V) {+ |5 S+ ]6 w/ m" m$ k; z/ @( U
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。7 M" h* l! }( W8 j6 V; b: v
9 C5 r7 @5 J3 D5 |( H% ^
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
% U/ @) A( J9 j$ h4 f0 g' N
$ _4 S, `' k4 y% A" ?9 k3 L13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
0 W* p* b4 \* ]& d: O# d& b5 Q+ r
' B) x+ x( i( ^( h- ?7 U  }  S14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。
% ]0 V) a7 \) @% X0 i% ?, h5 Y5 F7 f
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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