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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
: \: d7 U- u* GPHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。! J" B' ^9 l7 C& M
本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。3 ]; j0 z9 ?; x6 d' J4 `" ~

$ d) K8 L) Z  ?% N& z# V( l! b- {" b8 t6 i# Z
问题% T" z; ]. X9 V* C  A6 R$ T8 z

7 W' o0 A" f, l& r) a7 B  e1 L1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)
: Y+ c  m7 e2 `7 }# S7 ?8 t# x! w6 x- b$ E2 _' U- z$ V
SELECT * FROM MY_TABLE3 \) J- {' j% }* f
7 ^5 `2 q9 x, }1 T
A.如果可能,用把查询转换成存储例程
% j% X  e0 O0 ~8 nB.如果程序允许,给查询指定返回记录的范围
3 q% g" o* J4 D9 I! y/ `9 @C.如果可能,添加where条件+ ]; R0 T% x/ K$ ?
D.如果DBMS允许,把查询转换成视图
0 k2 @8 r4 W" N3 @E.如果DBMS允许,使用事先准备好的语句2 T9 E) }# ~6 B7 J

9 w4 A3 C8 v" o- J, A, b3 o7 r; G! I+ i! B  l
2.可以用添加______条件的方式对查询返回的数据集进行过滤?6 b; N6 |8 v2 Y' p( i8 x9 f
+ n7 X. r2 ]) P* v6 h
答案:____________" e$ `2 G; ]  \
1 Q9 b7 ?1 I7 C8 e7 Y  j
3 w* F" s& i8 [
3.内关联(inner join)是用来做什么的?
) `# |9 u% g# a. _  Q8 x: x. O7 m" e3 h0 O  U0 m( S/ P
A.把两个表通过相同字段关联入一张持久的表中
- l9 Y. M8 I! ?% c" p3 WB.创建基于两个表中相同相同行的结果集0 k9 m9 s& A/ i2 S
C.创建基于一个表中的记录的数据集
- N' s  f0 v3 X/ Y( q" {2 y0 bD.创建一个包含两个表中相同记录和一个表中全部记录的结果集
( r2 `7 ~" J" o9 `* YE.以上都不对8 e4 @" C: ?0 u8 }3 S

% |& ~* M3 O! c: g& x
8 m; x* {7 O) e1 k/ d5 @* N' G4.以下哪个DBMS没有PHP扩展库?
# Z0 _: {$ O& \, t. ]% U* ^; ]+ v4 S
  |2 g# j  `! _: SA.MySQL
' u% P3 I5 J. C/ |, z& UB.IBM DB/2
) H3 l/ i8 k  IC.PostgreSQL
  w0 l8 I% }2 TD.Microsoft SQL Server0 u$ b' b+ X0 U- W/ q$ j: t
E.以上都不对2 J- m3 U- B+ l0 X3 @
0 Z5 o+ A, u0 L2 k% U
* {/ Z+ x. K/ n$ n; ]2 f
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)% i8 [$ Y/ F+ L! U. ~. V

- N/ Y& R+ a; w4 R8 U<?php
  ^2 Z/ I; y; p! B$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
; E: P6 \; K- `0 m* m?>
) s1 ?! b( A+ C7 r8 j! G: D" e% T5 K# J$ s. N
A.MYTABLE表中的记录超过1条/ r- U' Z1 h5 r4 _
B.用户输入的数据需要经过适当的转义和过滤9 Z# ]" C* ?5 {
C.调用该函数将产生一个包含了其他记录条数的记录6 A! E8 {  \# D- `) L# h) w
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除$ k' ]  b% g% a$ ^
E.查询语句中应该包含数据库名$ A! F9 f2 k, }3 @  j% Z4 l

7 _7 ~7 K4 w" v2 `
9 K5 ]& p8 ]1 W/ m2 Y/ a2 `6.______语句能用来向已存在的表中添加新的记录。* S  P2 n6 d3 I# y

) `; o' F. I- z% z答案:____________' T! H  e6 P) V( G3 M
) |5 |) ?" m* }9 _$ L

, g  t. m" G" y0 o4 F/ p$ L( I7.以下哪个说法正确?2 {* h. y1 \8 W) `- |7 n, p
- ?8 f6 S  k' {* z; K
A.使用索引能加快插入数据的速度
5 s( J9 B% M/ wB.良好的索引策略有助于防止跨站攻击
  C& B  G' a* g: b3 P3 eC.应当根据数据库的实际应用按理设计索引
% D; a3 F8 ^: h/ `" e7 pD.删除一条记录将导致整个表的索引被破坏
2 V& Y9 Q4 B6 d* p3 F# eE.只有数字记录行需要索引7 e+ u2 w7 x/ J6 n

- _/ d/ u' x7 j. n7 h. ^8 ]8 G$ I  J/ f" s9 ?
8.join能否被嵌套?8 U8 ?; v! _( {2 h/ N

+ b" p( p. B% @9 T  n: YA.能& p$ i/ z4 r- s, N3 f2 B
B.不能- }3 L9 f6 o3 k' Q4 a

1 _7 s# t; O) N& W7 D# P( f0 i0 e6 Y' R" ?* \! d( o6 q6 m; U! Y7 J
9.考虑如下数据表和查询。如何添加索引能提高查询速度?
2 Z3 ?7 h/ r: r! i* m' ]; x, Z1 ?: |/ }2 d6 ?# C7 C
CREATE TABLE MYTABLE (
# P) P& f% Y7 }& t% ~; Z3 ^ID INT,# n. ~, [+ W, y4 d& X
NAME VARCHAR (100),& B6 i& S4 D" S8 W
ADDRESS1 VARCHAR (100),
8 @1 u" s6 \$ {  m3 x; SADDRESS2 VARCHAR (100),
8 T; }/ L' \/ u! E6 {ZIPCODE VARCHAR (10),
4 ^/ e, }, n, t1 ]; e& y2 Z' GCITY VARCHAR (50),6 o7 `3 c# w! p
PROVINCE VARCHAR (2)* K2 W: `5 F& b4 b3 N
)+ P: v3 T) [4 V4 [5 F" |4 t
SELECT ID, VARCHAR
, i! I/ i% H& qFROM MYTABLE% w; v+ p/ h0 ^) Z: J& {
WHERE ID BETWEEN 0 AND 100
* }9 S: d0 R% `* A4 g1 s# s7 }ORDER BY NAME, ZIPCODE
9 t/ }- t( P  G) G9 K! f
; E% y! l  `$ g- t" k& y) C4 t& l& SA.给ID添加索引8 p) Z' U6 _  _* U  D  E9 D
B.给NAME和ADDRESS1添加索引
, ^! }, Z1 I4 WC.给ID添加索引,然后给NAME和ZIPCODE分别添加索引) c1 V8 }2 e' S( H
D.给ZIPCODE和NAME添加索引
7 }% e4 t- n- m- v! rE.给ZIPCODE添加全文检索
6 p5 [0 J; X! W( [4 V' |$ V! v# N9 [4 n% Y! V' z

5 y# D, i+ L2 U  U10.执行以下SQL语句后将发生什么?
. A* o, T& x# q- L5 n( e* c9 q$ `# ^$ t7 z7 s  [0 U; D- _. ]
BEGIN TRANSACTION
3 U& \& [1 f/ U3 Y8 H6 K$ SDELETE FROM MYTABLE WHERE ID=1: {; X5 V. b+ {5 w% J# K+ S- ?
DELETE FROM OTHERTABLE
9 n% H4 X& F! c6 \) m' xROLLBACK TRANSACTION
! T2 m8 E$ h, ^7 W
$ V6 y1 s3 S# Q& q# V" HA.OTHERTABLE中的内容将被删除( Y% D# m. t( e2 c5 p
B.OTHERTABLE和MYTABLE中的内容都会被删除
3 e7 B; h  s+ ~& `1 j. U2 mC.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除! p- ?! j5 I1 v8 [, c& D
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
- g, m2 l1 w$ b' \E.数据库没用变化
& Q  H* V( S* q- }& f; J4 s5 V/ H! ]9 k- `8 A6 ]; b& n/ d3 {

: U+ W4 Y. g0 ^) A2 `% K" ]5 f11.DESC在这个查询中起什么作用?% f- o8 ~9 B7 Y' _9 I
0 r* c' T6 R$ T( E0 k! K1 N1 e
SELECT *" b, v7 `  [! V: S9 t% s7 S' X
FROM MY_TABLE
' a, @6 K( B: [2 f: cWHERE ID > 0
* k+ B% A; m' H- \ORDER BY ID, NAME DESC
" B# j0 p8 m' z$ u
* K4 e4 R. Q- o! ?A.返回的数据集倒序排列
! ]  Y% \% R+ G; @1 IB.ID相同的记录按NAME升序排列- k4 u6 {) G8 c; d0 t- e
C.ID相同的记录按NAME倒序排列  z3 u# A+ M- v0 F$ b
D.返回的记录先按NAME排序,再安ID排序
* I5 J! o# s, f* X* N* nE.结果集中包含对NAME字段的描述8 c. x( L0 R& n

2 I9 j. t) F/ j
+ ]/ z7 d( J6 r! Y% w: T8 {/ V; Q( `12.以下哪个不是SQL函数?
/ U# G$ C+ X4 }$ y( J" o+ Q2 j7 |2 C0 J" u7 A0 }1 a% T
A.AVG
/ o, }% e; }0 j( gB.SUM2 |# T4 H+ `: A8 C
C.MIN9 g- e5 m; }" g% \# F# h) T& j
D.MAX6 h. d1 t3 M3 ]7 M
E.CURRENT_DATE()1 Z7 o8 ]5 n6 \4 N5 X
. v( O& X/ h: h7 D, T$ s) x
. I8 V: p5 q9 z" M* D7 M$ J9 B
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?3 p/ j& R5 d0 l, {0 ?3 Z0 Y
" U0 G9 G; a5 w% Q9 x% S4 s5 Z
A.该字段必须有索引
8 H' ?1 R0 i/ R3 {; R3 Z# y5 `B.该字段必须包括在GROUP BY条件中
, ]; g6 J$ {2 x4 n  ?C.该字段必须包含一个累积值" D& t6 I/ c  |7 {
D.该字段必须是主键
6 |2 ^( C% ~8 J9 q6 n/ FE.该字段必须不能包含NULL值
! |1 ~% L5 r, p/ U6 b$ ~6 z7 L; d' r4 K3 z
' B1 C, \/ S6 w
14.以下查询输出什么?* M4 y$ L) n7 A
5 {' l6 _/ H$ R4 L/ M0 n
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE29 N  o1 T0 A; r. U/ I2 e. O
ON TABLE1.ID <> TABLE2.ID
3 w8 W; K4 I! G# o" W" G0 g0 y, y1 |! ?+ n
A.TABLE1和TABLE2不相同的记录
: v  A, {  M  t+ o; ]4 VB.两个表中相同的记录
$ R8 y3 K; G! S6 k, |6 iC.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数% e2 X0 V) d: E
D.两表中不同记录的条数1 b* A% R! i: c1 `7 U
E.数字23 k) i& Z* U- s3 f
* t4 q6 u5 N& H  p$ d8 L# R' i

5 c$ p1 k4 Q$ n* ^15.______能保证一组SQL语句不受干扰的运行?- S! k( o0 e, o3 w, f( Q9 C

* @6 a7 n2 g4 \答案:____________# n! Y& x6 C8 H( y8 M

# e4 j+ t8 U$ K* R5 I* e$ Z
/ U$ u$ `: h7 n, H# R6 K4 r
. R# ~% b( {- W2 ^' K% C0 j答案速查
: n. C- h. ]% Z' s* {# r3 V1:BC
: t9 X5 ]1 ?: J4 U! _( p2 h2:WHERE
/ a6 u7 o) o& U% j3:B* s# K0 L1 B3 X% ~/ j+ s
4:E) q1 l; @& J  B7 x- c7 W2 R
5:BD4 c5 _) ~. _( \; o9 d" U: p
6:INSERT) S% B4 ]  }  s$ |9 C
7:C
$ X( M, g9 z. N, W% \' l9 H' w+ f8:A: q  v4 x0 n6 _1 O7 r+ |
9:C
; v6 Z. A9 v  o2 v10:E
, w3 A7 v6 |6 U& [* E" ~11:C8 w# F$ T: S6 S( G* ?) r4 R/ M7 M
12:E
) h4 ~! {% a" t2 p) `# w: e' l13:BC
+ t( U9 i! Y1 W4 y" I14:C: d" n; Z, x$ i: R4 f8 x( K% A
15:事务# f3 R5 D% j3 T' V" e0 G7 Y. T

) T$ u+ q0 O. g! l; ~
) V" k# ^- P2 }% Y9 D* B* g9 H0 D
8 P! I; f/ k* F+ ]0 m答案详解0 q) Q  Y. @7 Y, J' B

5 m( o& L7 V' O) l1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
! W  T- {, _( t- c$ g1 N* g$ ]# s: u1 U7 }6 ~# h
2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
- Q# |7 i" l5 y5 o9 o
! |' m+ |2 t% i% y8 \3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。
: k* r( _* `0 k/ _- {( ~8 }1 Y- F. m5 o( m
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
: i0 i8 @6 z) A5 |% a7 s, o9 L# ~) ~3 M+ C
5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。7 G7 l  d% @/ c0 }

8 N9 o5 m$ n: Z) ]% N3 W( U; H6.答案显然是INSERT。
6 \. \9 o; `( E) ~. q+ z) O0 e+ Y" ^" R/ H! D- K* G0 k
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
& {. u% z2 p2 n. R& @+ @" _
" E) U- @& x% M) N9 c- H8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。! x. c+ M  b! Q

% n. b  g7 U& O( A9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
# I' n# D3 p3 o  h
2 ~; P- Z6 y  m/ N10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
$ D# {9 ?3 O0 d9 M& N8 g/ j
: w# S6 Y, o# `+ {. m11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
$ s1 j. g. D& o  c2 o* j+ d6 _5 e: G
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。! c  c9 t( R/ K. T5 P
- b$ n2 ?& [( K# N  s0 R. ]
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。  n" u' s& k% [  I

9 q( M0 T% j3 U9 }) c1 u5 r14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。
& v, j2 K% d! y* Y7 Y- D% Q+ A) `1 o' |! R! h4 o
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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