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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。4 s! c" B, a0 O8 E
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
. R1 H1 u2 E  }& g0 w2 j  [& q+ Z本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
8 D' L- \# ]5 {9 \6 A3 r. S
- Q' |( d% k. K' X& B
: Z/ ~3 H; j, ~% H问题, ]% K  j* s3 }( v( ]

! F5 T! v" m/ t9 X% V7 V# L1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)) X9 g: ?5 I5 l2 x( C' z

5 B' [# j8 Y7 H5 _( {SELECT * FROM MY_TABLE
8 m5 E& ~& n$ w1 }* ?
3 }- c# w! N4 HA.如果可能,用把查询转换成存储例程* u; `" J/ |8 e0 w, _  I2 r, Z
B.如果程序允许,给查询指定返回记录的范围4 W2 l1 o: D  ^, I" m
C.如果可能,添加where条件/ S$ G% P9 z9 }
D.如果DBMS允许,把查询转换成视图
8 W( [0 P( z- c$ i& F* `E.如果DBMS允许,使用事先准备好的语句  J: F2 K1 d1 \5 l$ i$ I
" N. l4 n0 t7 L, W& O( p

$ o/ _8 Z7 V. C( ^/ F2.可以用添加______条件的方式对查询返回的数据集进行过滤?9 j+ V1 e4 L" j

6 X# _$ j8 U6 C' }答案:____________
5 Q% m' d% P' Y3 K0 D
1 i# G, u1 e: l6 S  I4 q
6 ^+ p3 ?8 r( T; Y% f; e+ z5 S3.内关联(inner join)是用来做什么的?5 d3 s  i) ~/ }
, ^: q( z+ N, ]: a& |+ }
A.把两个表通过相同字段关联入一张持久的表中
, Z4 |2 u9 r2 lB.创建基于两个表中相同相同行的结果集) R  s$ S1 r1 ]2 o* j
C.创建基于一个表中的记录的数据集: @4 l  m1 X! J
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集
8 q% @8 R3 S4 B8 t0 EE.以上都不对4 b+ g! \' k" T+ i# w* [) Q

2 X5 Z3 N& `7 Z, L* ?
3 M4 i- U7 \7 _6 M7 s0 b# v4.以下哪个DBMS没有PHP扩展库?, G1 |9 d/ V- O2 N0 F0 U- Z5 U
8 x& r* \* a# Q3 l5 c$ [5 h( |
A.MySQL
' }1 d  W7 [$ I/ g7 P9 `* ?B.IBM DB/2
* T; Y- q; t: U) q: GC.PostgreSQL
0 M. x, s2 P' q% B, C- K$ G. UD.Microsoft SQL Server$ R. E) S6 ]$ i7 k4 z; L2 Y+ E
E.以上都不对
3 {4 w& _, M- U9 C, ^& v- v" y7 @! G4 B5 d

- G8 q" ]# D: E. y6 }5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)6 i& ?; w% u8 ?  T

9 Q( ]# j* l" u: _! ?<?php
0 L7 D8 L4 _' `% L; U/ k8 K, T$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
" P4 z- h! z! A6 \$ m?>
+ S( Y0 _5 e7 i0 Q* U* l6 Q, [* k4 e. `; \8 A5 p) e- F+ u" P
A.MYTABLE表中的记录超过1条( I# X" }# F) L) y; ~% U/ r
B.用户输入的数据需要经过适当的转义和过滤
8 W6 o- E8 l( ~C.调用该函数将产生一个包含了其他记录条数的记录
1 q3 U0 f$ w& ^4 _) ~+ `! i: v2 oD.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
; N; y; X7 n& b8 W, z: IE.查询语句中应该包含数据库名
5 D: \: A  K0 \( o2 t2 L% {; O: x! F7 y
# f" Q5 P8 |  o/ V" W3 ~. w" o6 c
6.______语句能用来向已存在的表中添加新的记录。
$ ]2 B/ y: d7 C2 y* E& j4 w5 l: V* P' ~4 }9 l& {- P! q) ^
答案:____________
" E4 {) ]2 U; Q9 [* L9 C% h9 n
$ U2 G) L" V1 R& h" C: k, d: v2 F+ M5 P, M( c1 V; \
7.以下哪个说法正确?
: p, F$ c  N' k' Q8 l* I& k6 C. g9 s' t4 W, N  R2 a
A.使用索引能加快插入数据的速度
" ~( O! B# U. n* p! I  @  K8 pB.良好的索引策略有助于防止跨站攻击/ E. D7 C* |) _& ^; G) Q* s
C.应当根据数据库的实际应用按理设计索引
; D$ x2 c  s! M" RD.删除一条记录将导致整个表的索引被破坏
  P* f  {/ S+ m/ \# iE.只有数字记录行需要索引
5 [" `' ]9 A, A+ {! \& g& w
6 X' z0 M$ v& z7 b% r7 R" V
' b0 k# ]6 W& {0 }) m$ ^: h8.join能否被嵌套?! \; E1 D" N4 S) k
! T& v  e* P4 ?- n& l* o
A.能
# @& S) I" M4 i; o8 X9 |% mB.不能
. C7 f3 \$ P2 I$ P* T8 ?
) Y" n- Y" \* N7 S8 \! H7 |! k0 ?0 _# E; T8 n
9.考虑如下数据表和查询。如何添加索引能提高查询速度?) e8 Z" `* r3 \2 f" _% ~) z
" T8 {2 s. ]5 }
CREATE TABLE MYTABLE (
6 v$ l( a" `. h: }. DID INT,4 z9 [" ?3 h; i: D, l& S, M
NAME VARCHAR (100),, \9 U2 z3 R  A2 m7 ~
ADDRESS1 VARCHAR (100),
* Q/ e5 m2 R; q" W: fADDRESS2 VARCHAR (100),
9 U# J: a9 D1 D& ~* @9 L2 J% NZIPCODE VARCHAR (10),
9 T- I& d) H5 l- Z( n$ ^0 hCITY VARCHAR (50),7 r. v- R% ~/ P) D3 P. `
PROVINCE VARCHAR (2)
& B# p! G5 v( [" d4 U)6 Z7 y) q/ q/ X% ]+ C; U0 r! T0 R
SELECT ID, VARCHAR! s' A4 _3 s+ X) f% v3 @  |
FROM MYTABLE
# X) Y3 w# n6 ~2 [) ^* ^! x6 Q: ~) \/ zWHERE ID BETWEEN 0 AND 100, M0 U9 i. ]7 r. N
ORDER BY NAME, ZIPCODE& T$ M; Y( x2 i0 f! i$ l

5 Q+ B. `7 X2 q. ^. HA.给ID添加索引  H+ n. j+ ]! o/ p* {: n
B.给NAME和ADDRESS1添加索引
6 _/ e% F3 e  O  Q  q# o; E4 }( tC.给ID添加索引,然后给NAME和ZIPCODE分别添加索引  L% x2 D- u1 s+ ~2 [+ P: U
D.给ZIPCODE和NAME添加索引
8 d* T% ~+ f2 C$ i' A0 c  h1 m5 |E.给ZIPCODE添加全文检索3 W- \! L* Y" l
% T" J( B) D0 M: p; K, e# v

% a0 n; j. J! b5 Q* _10.执行以下SQL语句后将发生什么?
4 P8 j% l# z2 ~8 D, t5 W. j/ F6 B$ k8 L; R
BEGIN TRANSACTION
) z7 M0 ^, ?% i7 gDELETE FROM MYTABLE WHERE ID=1% B7 n  X' g' W8 e. A, n! D
DELETE FROM OTHERTABLE
+ f+ J: d: N$ e5 yROLLBACK TRANSACTION' f0 T" r, \5 A
5 y& K4 L8 H, o* [0 t- w- M. {$ A
A.OTHERTABLE中的内容将被删除
( F6 }2 V, O. }# w. A: eB.OTHERTABLE和MYTABLE中的内容都会被删除
* G$ M# l& s5 B* ]8 m8 oC.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
, S0 i0 r6 T8 U# K' f+ GD.数据库对于执行这个语句的用户以外的起来用户来说,没有变化/ J0 e& B! ]% }: y0 j9 k4 D
E.数据库没用变化
$ T6 e6 d+ G% m, n, T  g% L6 ?/ Z& n3 S

# S' G& v8 K' t1 g9 @11.DESC在这个查询中起什么作用?
& [9 M1 B/ C8 H5 G" _1 p
) ~( @0 d! s+ d/ H& m  S) qSELECT *
+ L( w4 Q/ s, d6 E- EFROM MY_TABLE% z( u6 r; ~8 [8 ]
WHERE ID > 0
- y% ?* G6 w8 a& A7 s* R4 b. RORDER BY ID, NAME DESC
: F3 B& }% R6 P7 O6 a$ u' W' r& F  k8 z( t4 H& }7 k
A.返回的数据集倒序排列4 ?. R1 X$ w, Y) ^( s" b+ u) h
B.ID相同的记录按NAME升序排列
( A! [8 G. z: {% @. }; |% S( P; sC.ID相同的记录按NAME倒序排列
( C; [, f% ?4 i+ n: u- H& s# l( [D.返回的记录先按NAME排序,再安ID排序) e. _+ s# E! A  ?
E.结果集中包含对NAME字段的描述
0 a1 K. o. p( J6 c; K, N3 `
: `3 {, g9 C7 J& l8 x# x) K) k& s, n2 w8 m; L
12.以下哪个不是SQL函数?
; D3 I2 J" }7 V  B* s" M
5 [2 `$ a1 v- DA.AVG
9 b$ D! B& U- d" Z' NB.SUM. i" `, B. F% W" V- f
C.MIN
$ ~% g; A8 |0 ]6 N4 K) |9 P4 b0 YD.MAX
: A4 l: [9 M, z( ]" I  iE.CURRENT_DATE()9 B: u3 m: |" H3 |0 z+ f8 f. A0 m
3 U2 n5 ]' W  A0 ~# S
3 B/ ^% u/ G/ B* M2 J
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
, A) \& Y$ U% s- i! m' E0 Q
! ?0 B) r+ x( A* M3 w  @A.该字段必须有索引% o8 A! g6 I6 D$ n( Q2 s
B.该字段必须包括在GROUP BY条件中/ m% N# J1 k/ T
C.该字段必须包含一个累积值) k" e' D' H/ y5 V  V( x: X4 {
D.该字段必须是主键: O, ~0 @' B9 ^, q
E.该字段必须不能包含NULL值
/ b+ }; P; X. }" G! x9 B' b( x
  V8 V) G9 I# I6 H1 X5 X' N4 Z
9 D- M9 ^% |5 A" ]( E# C14.以下查询输出什么?
$ @5 x6 ]: T9 f5 y* t: ?3 D- t# R; ~4 v  L
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2. J/ C+ q. F2 M% \
ON TABLE1.ID <> TABLE2.ID; j2 e- f; R& b3 U0 t
* W! k5 s$ y& O) e; R
A.TABLE1和TABLE2不相同的记录
8 j6 }+ z1 c- [8 Y$ q# `+ k/ ^B.两个表中相同的记录, P& y/ t' H. q  h+ y
C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数" n( o. b! \2 y. X6 z+ \# F
D.两表中不同记录的条数
3 O" z- A0 r: L3 ^E.数字2
& n, b) r' b& m$ C
* x7 s' ^0 E2 Z# H0 L3 H% _* _  B; z: _) b7 ~1 F
15.______能保证一组SQL语句不受干扰的运行?9 D- S$ l1 j# ]6 ?* t

$ _& b0 v% a1 `  R/ n: {* V答案:____________
6 G7 a+ w. Y/ a: w; K+ D3 B7 g. V, ^/ x: b1 D$ d/ L

: F! \9 J# {% A! p" L
. @! Y6 x! e+ X( k$ U4 d3 m) D答案速查( G1 F; a+ I% D' O+ M6 B$ t- _) y
1:BC
; `) g! A9 x- W9 q' E  q( Y2:WHERE9 [7 j9 E0 N9 [, x
3:B5 U  t/ U$ K. e, o: o5 k
4:E2 L# h6 ?+ n3 p
5:BD8 K$ v  i, s: a9 s) J! ^( A
6:INSERT2 I" w* Q" S1 X! S: G1 c+ g
7:C" B% n; a+ h+ s% _
8:A
; l$ y* Z  @5 |4 J% I- @" P" H( S9:C
% r* [( L0 [6 [, |" V10:E4 I) k3 o- {% h0 |
11:C/ D9 K" c6 |; B, v9 a
12:E
& h6 S* O5 |4 G8 Q0 H9 K13:BC$ D( A9 u2 \, L/ k& t, \
14:C
, q7 A- d- z) r15:事务1 R) V4 ^( W% D5 G6 k
6 ~* N7 X. T3 Q% C# v$ K4 l; f: i& j. y
, M' r* C0 n* Y5 H2 J4 q/ t3 @2 \* S

1 {8 z/ Q$ U6 V" \( e2 r答案详解# \; g( m3 s6 h& v
, |0 B# c; d: f
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。# \0 b" X6 w4 N$ x/ ?$ h% L
: A; [' N1 a% F& {* C) a, @- b1 u: |
2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
, @5 G9 V' B2 d- I
: A# N. U7 i& l: ^! V; R6 q3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。: W+ e! V$ S% Y0 ~! t" Z$ a

: P9 A7 d' ~- F3 \' r& ]- l4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。, i# b; A* _& o5 K& x
4 y2 L, y4 P% N9 l, }% e
5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。$ R/ l7 H' X2 N( ]
5 k: ?& a, z, s
6.答案显然是INSERT。
+ W1 ]$ v& X+ z; I9 x$ u: P' h9 j
- o$ j' W+ {6 Q7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
$ T3 g' i/ _( x" i- y+ d" Y% C. ^2 ^/ e3 W
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。+ T2 i6 ~+ G. U

# D+ W: h+ v* P; B" s% @9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
; N2 l7 N- u+ ~5 G
( q6 {- I: X4 n1 o" g10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
6 W' P% l$ F7 A5 S1 M. H. X: d3 {6 O# g% ?$ U, G7 e- G
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。- b% K+ c3 O# W2 x  J5 |6 w: d: x

* v. P5 z$ E4 X6 [12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
) u& |, P2 {  y1 d* q* `- A" B  n5 C8 Z5 ?* k/ _4 M7 \
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
: |1 f* ~: r9 i7 \. P- a5 d3 t1 {) N2 R5 J- n
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。
8 F" t& n1 @7 O
) _( A5 Z. F( G7 B+ u" s2 g5 z" o15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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