返回列表 发帖

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。* I0 [& i2 I) ?: I
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
, ^  c# {; C: _- r本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。! m  m9 _  P+ W' _+ d  M$ W4 R$ n

+ i" o; j- X2 B) A8 }8 _, j7 O6 y! p) o& @! x& `
问题
7 C; m. f" p% W
/ j( t. }, H. B, C' e1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)
* b, I0 y1 P7 p' I( [, J9 r
* P2 a$ y$ w( R6 i" g$ \) }SELECT * FROM MY_TABLE" B/ H; n0 Z: K. T
/ S0 b. Q' G8 \! |
A.如果可能,用把查询转换成存储例程! N3 c. Q) |+ }% K" W- }+ n! D3 S
B.如果程序允许,给查询指定返回记录的范围9 e. _9 i. {: v$ B
C.如果可能,添加where条件( X" N0 v. z! t/ Z% R1 ~
D.如果DBMS允许,把查询转换成视图  Q, |4 F/ _5 p3 u( _  T, E  \: G
E.如果DBMS允许,使用事先准备好的语句0 B7 F: R! W' |+ ?2 U3 z9 y
" _" b1 d6 l0 _4 b, i
! ~. t5 N4 H( K8 j" ]7 J
2.可以用添加______条件的方式对查询返回的数据集进行过滤?: k% N7 o' g* ~' I/ C* a
) n- t0 a# v9 q0 b( v
答案:____________3 {" f" D7 `& c2 ?" [

# Y- G0 ^8 [1 z! U( m' I+ V8 E! q. U# B4 e0 ?9 O8 ^$ C
3.内关联(inner join)是用来做什么的?
4 Z$ f6 q* f& u' u7 \
# M: ^: K( s- N" l1 _  c  FA.把两个表通过相同字段关联入一张持久的表中) K2 _, g# Q* [1 U( d' r$ u& `
B.创建基于两个表中相同相同行的结果集
5 S, |# E! n) |5 ^+ q3 _C.创建基于一个表中的记录的数据集
* i1 n( Y9 d6 gD.创建一个包含两个表中相同记录和一个表中全部记录的结果集! g% Y/ B; b& r  D
E.以上都不对
% R# N; ]' a2 y6 q3 x1 l7 a/ e6 m  `/ _: [, x% v
, H0 O2 P1 e0 G! G
4.以下哪个DBMS没有PHP扩展库?1 K$ E. D( l  A. W$ ~

! c# i4 k0 x) f3 j1 l! m4 rA.MySQL' X& U3 {+ @7 J
B.IBM DB/2
$ Q. \: c2 r% w  S+ u3 ?# w; ~  z  aC.PostgreSQL, e3 U, f" L% n2 L+ k
D.Microsoft SQL Server2 }5 o+ A2 y( a% B
E.以上都不对
6 P/ H  R+ M! u
: C5 R- X2 j: s  q; [( S2 p8 _0 a0 @# x: U% r4 w; ]
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
' ]1 H5 p8 J6 O4 x% ?; \- l3 y5 r' u# j  C- j+ S
<?php
' a9 l7 V" z/ {, |* s" H0 ^' A$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);3 z7 ~! P& U# N1 E% v
?>
4 W% r& S% m/ ?* D% o
" F: W, S! C1 `+ q) y% a8 D* Q$ IA.MYTABLE表中的记录超过1条
) a' \: L( `  d2 jB.用户输入的数据需要经过适当的转义和过滤
2 O+ K/ P3 k7 f3 g; u7 H9 W0 k3 EC.调用该函数将产生一个包含了其他记录条数的记录9 y5 I- T+ @! P0 }8 E  @
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
# [  U) G" a6 R9 C! ~E.查询语句中应该包含数据库名  T% _3 G& n# P) \# C7 P
! I  Y+ x/ `, B3 i& m

' Z" w! `  ?0 c4 a' s+ W" \$ U# x6.______语句能用来向已存在的表中添加新的记录。
3 K# G- {; E# ~5 ^! O
. }2 x' v! d3 y; J8 T/ K答案:____________
9 @! Y$ M% U$ P' D( A* S5 D& L2 ]+ O$ P; p

2 M; p/ t! c' ?: d5 r7.以下哪个说法正确?1 b4 j2 c, v# N# H% X

/ J( e$ q. z+ L9 K; CA.使用索引能加快插入数据的速度4 h% r& ?. L" o) _6 Z
B.良好的索引策略有助于防止跨站攻击* Y+ i. J0 P7 V2 J5 C( [
C.应当根据数据库的实际应用按理设计索引
7 U! P/ E6 F9 J* Z6 ~, u0 ID.删除一条记录将导致整个表的索引被破坏. @" P% I! T+ N  m: {* V
E.只有数字记录行需要索引
( x  a! j( z. E/ {: ~
! c9 W0 \' m1 L. ?  ?. Q1 y: \7 c3 B: t- q
8.join能否被嵌套?
& @% a; [- {; O2 p5 B$ g& _8 U. `$ a: _* S; P" T$ K
A.能
6 z) _6 q8 \4 T/ c/ zB.不能
! X2 z& J1 D( r) a! B$ d9 h) \: {' W( j; j
, q6 I+ R: r, J
9.考虑如下数据表和查询。如何添加索引能提高查询速度?
) ~' ~# b: H; I
) C$ T- a) G, w/ e$ QCREATE TABLE MYTABLE (- c$ g) v; \; ^  r! K3 X' Q
ID INT,* h% ~2 T1 M' Z( W* U7 h. [6 e- m
NAME VARCHAR (100),
1 L- O. H# T. F: A: ?  O" Q8 C6 H: CADDRESS1 VARCHAR (100),! ~; `2 m! c) k
ADDRESS2 VARCHAR (100),
; v4 B4 Q+ X7 {  r- B& g9 k* H" D/ tZIPCODE VARCHAR (10),$ @5 R+ Q. W- A2 B2 P3 B  g
CITY VARCHAR (50),
* c* E% q! d( m$ A* t$ _# z4 cPROVINCE VARCHAR (2)
( i9 S6 S9 K5 y3 [) B)/ p% v7 q: Z3 y! Z$ c0 B+ C
SELECT ID, VARCHAR
! [1 ]( \* m# g& W' r8 t3 ]FROM MYTABLE2 b7 f4 U/ I8 t# D% X) N) w0 J
WHERE ID BETWEEN 0 AND 100
% ?3 ^; e" ?3 d% O+ yORDER BY NAME, ZIPCODE% l0 p" R, Q+ H) k; a8 ^& C

: V6 c8 _5 ]# v4 C7 }/ K3 mA.给ID添加索引
% b$ |& h5 [: v) vB.给NAME和ADDRESS1添加索引
/ f* ?, G' K$ tC.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
) v+ h5 b) F; T- qD.给ZIPCODE和NAME添加索引
! ^% {: D6 [" h* b: [. @% xE.给ZIPCODE添加全文检索
6 x1 p* p5 G" U. d) c
2 {; o/ r# p* C- H* G8 p. {6 o- ?) e. n5 m. M; R& V# z
10.执行以下SQL语句后将发生什么?  k8 [( z; S4 _5 ~. S4 S
! \/ k- Z! H2 S- r. h$ [# b& r4 {
BEGIN TRANSACTION4 {0 N! @: @1 X0 K3 }: E% x: v
DELETE FROM MYTABLE WHERE ID=1) M6 ~' S' S/ b- X
DELETE FROM OTHERTABLE
  ^3 O% H$ @  P2 f# }ROLLBACK TRANSACTION
( }, x- |, G: n' s5 K
/ e9 U5 ?+ d( \0 V" xA.OTHERTABLE中的内容将被删除
# m. K8 q- g$ h; i! X- L0 D. q3 E& ?B.OTHERTABLE和MYTABLE中的内容都会被删除* R' S+ P+ S  s, N3 J7 {
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除7 V) J$ t" j- i2 S( E% u
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化; s$ w' E3 ?& H- K8 q  A9 C: M
E.数据库没用变化2 I0 u8 t9 I. K& p; f0 }; L
! T8 u$ I, j* f3 U6 x6 Y& S
7 g+ x4 I7 H8 w2 T$ o: S4 \, H
11.DESC在这个查询中起什么作用?
9 j5 h  }$ O; c% K- r! j6 G2 T& U- ?
% u$ d6 U- p! w2 OSELECT *
# m6 l* m( q) t. cFROM MY_TABLE: C% D* I2 z$ q; e' w
WHERE ID > 07 J. D" l0 q. x; L+ l; f
ORDER BY ID, NAME DESC
+ i9 w8 u3 }3 F1 t7 x% Z, N
! z+ t4 ]( p: E* l& X& T1 p5 h% J2 WA.返回的数据集倒序排列. O5 G4 K$ B' i, ^" C' Z1 L
B.ID相同的记录按NAME升序排列- ~9 J  J2 b+ B! A
C.ID相同的记录按NAME倒序排列( I, U7 u, S& A) `% s
D.返回的记录先按NAME排序,再安ID排序# R8 M5 z% U' T' A; t
E.结果集中包含对NAME字段的描述
5 J$ V, Y  ~+ f( r0 \( S/ l$ [$ Z9 s! ^- g* r5 \) T

/ E" L" Z; f! ^- W) l8 g12.以下哪个不是SQL函数?6 l% N; @; _% n; g$ c" y
; h8 X" C4 w5 q  a
A.AVG9 o6 H, J. T$ N% T: m
B.SUM, b; N4 [- O# M/ G, _6 C
C.MIN
, z: ^. I$ \8 M, ]% cD.MAX$ o7 p, N( D- e, {! r. B
E.CURRENT_DATE()
3 p) d3 e( N* D+ y5 t
- I$ n; O& A6 K% s# s0 x8 m9 k5 S) K. F
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?7 `4 [$ W. v; J; Q# d* T' x

/ \4 A" X( d) p4 K! }/ |% PA.该字段必须有索引
' x* l7 A7 ]7 H* f, QB.该字段必须包括在GROUP BY条件中
0 g3 s5 w4 e  [+ I" A9 I5 WC.该字段必须包含一个累积值
, v, P6 h; m7 i1 zD.该字段必须是主键& `! o4 B/ _1 Z3 F/ v) P* K
E.该字段必须不能包含NULL值
9 q- l8 J( [( U" @: r/ S3 i( P9 G0 q: Y) O
" e0 z( q7 b% ]. \" U
14.以下查询输出什么?
* x$ Y" M: N# U. {" ?, o- @3 p3 B
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
1 _( ]' i7 N, i* Z6 rON TABLE1.ID <> TABLE2.ID
* P. s3 S0 z- [! ^
7 {) U1 C0 f3 z1 t: k: tA.TABLE1和TABLE2不相同的记录
& h$ e2 A; n. JB.两个表中相同的记录
- o4 ?* M+ ]4 r5 c9 Y8 v2 r# E- y0 NC.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
5 J1 e  }9 \% m6 e2 n$ j4 FD.两表中不同记录的条数2 z+ C. ]- M' Y; v6 @& V' n- z
E.数字26 s- m4 p+ C2 Z: V  O4 O

0 I  `. V# t$ Z! I+ s1 d9 n3 Q9 R  a
15.______能保证一组SQL语句不受干扰的运行?. Y7 m% `  f2 T1 K2 ]* n

7 Z- V. |% Q( g6 _- _, ^7 _4 S8 q答案:____________
! y4 ?. t+ W# T. S" b, m
1 i# K& o2 b+ B1 U; `6 C% S' A- W& u( b) d

+ b$ H% F. ^. N3 M2 E答案速查6 B6 L) {. b. \7 E1 h1 s
1:BC
1 w* y9 z8 y& c! @2:WHERE$ V$ A" x, U: m" k8 D' M: ~/ \
3:B7 ~3 x7 A8 B0 B( v0 K
4:E
* F! ~( _; \6 @4 {* _$ v5:BD, J& y& G$ l) C7 w
6:INSERT
0 W( V' E- |$ H7:C, d2 s) {9 K$ S2 ]2 d3 I
8:A
' X7 A/ K+ M( O3 T* m9:C
- r% l0 `7 y) h' I10:E- s( Y, ?/ _& S. f! ^# t
11:C
& t( v- V+ s9 O, l7 ?6 x12:E
" s% u7 _3 }& d$ ~( `13:BC
' g, L! Z2 L" s1 Q0 G) A14:C4 K! h/ b+ }7 C6 S* g: j0 F
15:事务
1 }) ]8 E" W* r9 s4 P5 w
: z7 ?3 r; b" I$ X( y$ I8 V' u3 C) s: t9 L2 a
  F: s; b% f, `0 k6 X6 C( d5 Q
答案详解
8 s2 j* I1 ~* I3 m
1 l9 Q  ^# g5 n* _1 g: c, \7 P, G1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。* z( V1 h" O7 M, \& j5 X

( j: D+ A$ _% S- A2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。! ~* Q# b3 c! a, b0 [/ V
. e. ?8 E+ O0 \2 F
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。
5 E* _& h: _  b7 P; b$ K" z6 k
: T; J4 A8 K; K4 z3 y4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。  s% v' s# A! x, U1 j

5 U8 M% R7 k2 K5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。0 e4 k0 u7 i+ ?$ }; {. g8 s2 Z5 o& r0 c

  O1 z1 u) m+ ^7 g/ d6 K6.答案显然是INSERT。
  K+ P& e! f: l( ?$ S( y( o5 T7 n9 `9 k0 x% T. p: @
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。8 l7 D/ s1 b! Z6 r

( o% E6 K: V0 r6 r* T$ @6 Y8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。/ d2 ~6 [$ T9 N0 a4 ~& m
, `0 z0 o/ F: N  g7 i; k! M
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
  m' w/ x" I7 F+ V$ c6 A2 r
" ^1 H/ Q1 T+ I2 s. B, G% j; N10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。+ J/ `) W$ B& X6 [& C- u
: |5 N/ _6 O4 Z! p+ I
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。- x  v; G# P0 K' n
; T2 w# k) \* z9 a- ]6 x0 R6 w5 @
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。. f* G1 ~1 X" \2 E3 |& B, W* O

% N1 x8 D/ ]: J  l, T2 X0 S; x13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。7 v$ m* l* o, k5 k; l, n5 J
1 |( t/ X: m" F1 n
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。! |; {1 D  s6 W  }: Z% s. V1 h

3 h9 V, y8 E/ G15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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