标题:
[Zend权威认证试题讲解]第九章 - PHP与数据库
[打印本页]
作者:
admin
时间:
2008-4-17 14:44
标题:
[Zend权威认证试题讲解]第九章 - PHP与数据库
如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
1 U+ ^: o: `( v8 L" O7 u7 o
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
. I' F/ U) h( j
本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
. V1 Z% m( P+ }, o
5 z" c. s* K7 H. s* c- O$ @5 | j
- |4 N/ \3 m/ p/ B# J
问题
4 r$ k7 G% V' Z3 r9 g# I2 M( B
! R) J9 k5 y6 [& b
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)
5 {% f) R+ O& X. D- n
# D6 s* A, p' R: D! ]* x, U
SELECT * FROM MY_TABLE
% y6 A2 y5 u4 _. B' O
& k: P6 H1 N" ?6 h+ t/ j" j$ `/ W
A.如果可能,用把查询转换成存储例程
7 n+ S- J8 g# S* j& D
B.如果程序允许,给查询指定返回记录的范围
" `8 J; w5 g8 y9 M, ^
C.如果可能,添加where条件
( z) x3 g6 g, `* k K
D.如果DBMS允许,把查询转换成视图
2 D- h8 [( Q S% X% o- T
E.如果DBMS允许,使用事先准备好的语句
: Y5 c9 h3 {4 |& H% R3 k2 {9 I
. E4 P( `) F, k r0 Q
; z4 Q( B) ^. m
2.可以用添加______条件的方式对查询返回的数据集进行过滤?
$ C7 w% O. g" z: d3 @
8 p( e/ V' g/ X5 w+ f
答案:____________
3 z9 C3 f! Y9 {, R
4 | {3 X3 O: _8 W6 R
1 E% y+ p& R' s6 N
3.内关联(inner join)是用来做什么的?
- J; j" B5 q, N
& C: U" F5 L' H+ A( }
A.把两个表通过相同字段关联入一张持久的表中
, a% {& C' Y3 r8 W+ S8 F
B.创建基于两个表中相同相同行的结果集
0 E2 f' v$ f% Z; W: T5 {4 t% A
C.创建基于一个表中的记录的数据集
, g2 a% m* R% Q6 g
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集
% p* v5 r! p9 ]9 Y+ C, a
E.以上都不对
2 ]3 o1 H/ d& n7 v; E9 q
& {, v6 Z& w/ `% C
5 M/ ]/ w: S& o3 v% ^) E$ K* C
4.以下哪个DBMS没有PHP扩展库?
. \% P3 o1 v* N5 K
5 d- P5 Z+ G5 T1 V5 J
A.MySQL
0 Z- G0 {3 e2 m4 O( A. U
B.IBM DB/2
( g1 P1 K9 g7 U S
C.PostgreSQL
4 w$ M- W% l, I9 y$ h
D.Microsoft SQL Server
! C3 J# o" G6 F7 i: H. j( j
E.以上都不对
; i3 H! m9 a( e( K$ M
0 c% g1 W6 Z# S( u8 f) Z
7 o. B7 J1 [! N0 D$ f& J q
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
" s ?; Z; K# U' @! u0 G8 T( P
$ I; g6 o& I# h: m8 V
<?php
4 E5 L4 A# S2 ^( P: R9 H. f
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
0 }. x+ B. G; \7 ?
?>
5 r5 B' f7 @8 J$ }- v
" f* i ^+ B6 Z9 T1 e
A.MYTABLE表中的记录超过1条
& J. Y D5 m f/ s
B.用户输入的数据需要经过适当的转义和过滤
0 `1 c- }! K8 D
C.调用该函数将产生一个包含了其他记录条数的记录
. H/ \7 X Z) _0 n# u9 _8 O0 @. h! N
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
% T7 N2 @' A2 b9 y9 L
E.查询语句中应该包含数据库名
! t1 d- t4 r# n; G
6 M4 u8 t; {' R3 d$ y/ I' X
1 B. ^5 I( I7 T- U" x
6.______语句能用来向已存在的表中添加新的记录。
6 ]9 J+ j( G* v9 P/ G- S1 @/ e' F
1 ^9 ?& `+ @' x6 |+ X5 f
答案:____________
& d; g5 z; A& u( I2 s1 @' t+ M2 X, Q
& |" ^, Q. {# @- g
$ O/ V5 ?, P0 T; K J; `
7.以下哪个说法正确?
- m. H9 [+ P2 D6 I' U
. z' H" e1 R/ [* N) B- y
A.使用索引能加快插入数据的速度
8 Z2 y1 ?. J7 [* } v0 s
B.良好的索引策略有助于防止跨站攻击
$ N* R- \- T' l2 a4 N0 f/ [+ A
C.应当根据数据库的实际应用按理设计索引
: ]- z9 ]& w, n* @1 _2 p; y
D.删除一条记录将导致整个表的索引被破坏
9 P% v8 N# P8 p* l
E.只有数字记录行需要索引
+ t# }1 L. V- W) _: Z
& s- [+ m- m# V! f+ S
# \, ~" P5 ^! ?: @6 ]. G
8.join能否被嵌套?
: R0 ]1 d- g& ?
" `0 |" s2 B) Z# P1 {
A.能
( F" t( a% z0 t3 m( @4 _
B.不能
( t2 Y" l, |/ _
8 w7 w$ V5 j5 {8 r4 g; c! M) _
' I6 a( ]6 j+ k
9.考虑如下数据表和查询。如何添加索引能提高查询速度?
8 u$ t8 B7 f0 L' q. a
- J! g* M+ u+ P0 h Z- ^
CREATE TABLE MYTABLE (
* K' p2 i+ y. d- A5 x
ID INT,
0 m, c$ E& V2 E% d
NAME VARCHAR (100),
1 e7 j2 x) r0 q5 K- b
ADDRESS1 VARCHAR (100),
! J5 O [: h G; @( t" J9 Y
ADDRESS2 VARCHAR (100),
Y) e- H% h# Q; E
ZIPCODE VARCHAR (10),
+ @0 i/ }' Z }7 _$ m8 o: i
CITY VARCHAR (50),
) t5 j( _4 i! T v% |$ B
PROVINCE VARCHAR (2)
* d2 w$ c- A$ j( w
)
3 |3 @, }! g" C! [0 y: ^
SELECT ID, VARCHAR
, S+ @) l5 c9 `
FROM MYTABLE
2 F0 D( L8 C# b
WHERE ID BETWEEN 0 AND 100
& d# b# v. R& O D7 U$ s9 U S
ORDER BY NAME, ZIPCODE
3 t9 k; S; d0 \/ ], X
* g. ]3 A# F& w% v
A.给ID添加索引
- r* t$ |+ { A* i* H/ g
B.给NAME和ADDRESS1添加索引
) j+ P7 l+ o+ v4 q* E6 S" \
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
7 y/ n; N& u1 o5 i5 H
D.给ZIPCODE和NAME添加索引
4 h; j6 U2 U1 B# ~( o' V4 [3 v* D. t
E.给ZIPCODE添加全文检索
0 ~0 g q: p0 L; z
+ W6 D _+ K8 M+ i) n' w, C2 }
8 ~( S! B' C; R, z# K8 ]( z
10.执行以下SQL语句后将发生什么?
) u% f" s c) G, d7 z! |0 { Q
: c9 ]% M' O3 Q9 J }" M* W. v* t
BEGIN TRANSACTION
( A. h& l2 C( s2 t$ @( e/ g
DELETE FROM MYTABLE WHERE ID=1
. c, K6 Z- \7 z/ X7 A0 ?/ l
DELETE FROM OTHERTABLE
6 P: g4 _, g+ h
ROLLBACK TRANSACTION
+ d5 e7 k8 |1 x
/ s* [: e, r9 M6 g* E6 B9 W4 _
A.OTHERTABLE中的内容将被删除
7 \0 t+ d$ z# G
B.OTHERTABLE和MYTABLE中的内容都会被删除
. J! v. F. R8 L- K2 R
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
, t+ ?! r0 c4 b- R
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
$ c' }' Y R9 w; J8 B8 t
E.数据库没用变化
% Z; R8 |% r- L2 F6 D2 P
: P: M' L' M% @: }( B8 R& R2 o
& y- e: {+ H7 w6 T9 Z
11.DESC在这个查询中起什么作用?
! y: R# X* ^5 `. T% [
+ @. N- L. |; a! B" O# q/ W; L( j
SELECT *
, Z: E5 u; G, N3 Z. A' M2 v
FROM MY_TABLE
& T, R; s* L5 m- _1 l
WHERE ID > 0
8 W; u0 M4 J! `* ?$ Q o1 g
ORDER BY ID, NAME DESC
( y$ M9 D# p( D& n7 H) D+ [1 W
. i; f7 B$ v7 Z+ V: g4 I
A.返回的数据集倒序排列
! Y9 h% x! b, v& B' o) N/ _5 n2 T
B.ID相同的记录按NAME升序排列
! J% C; U. {7 y) c7 S
C.ID相同的记录按NAME倒序排列
, `: s r d6 j
D.返回的记录先按NAME排序,再安ID排序
7 P2 W8 H. g. q1 `3 j
E.结果集中包含对NAME字段的描述
* M: ^& R! [, _ T: V8 O, ]- d
9 j- ?6 I! o) w
- m9 A% B9 x8 e. u' F. t
12.以下哪个不是SQL函数?
- p* Z* j! j ^" V$ }7 y$ V
7 A7 D, G) w- g- H, Z9 k* V
A.AVG
* s8 \$ {) z: m9 z
B.SUM
3 K7 E" X& F1 e- K
C.MIN
3 m' c+ G! ]* E; b
D.MAX
6 h4 E. \4 l4 ?( q6 n+ C+ K" b
E.CURRENT_DATE()
5 b6 {" \; @1 a! Y( M* m( f I
: Y$ r# M" O! h" a
4 b4 l1 Q0 q0 w- K
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
- V% C: ^4 |* p; j8 Z
0 z/ [3 s) }0 |: V% V
A.该字段必须有索引
: ~/ K$ p" G- Z
B.该字段必须包括在GROUP BY条件中
; f( z/ @( i+ v) `/ _' C% `& \. O8 @
C.该字段必须包含一个累积值
. m: D9 q1 `7 O% v2 w' x! [
D.该字段必须是主键
. }5 p( `" y _' b
E.该字段必须不能包含NULL值
: ?$ K5 w8 S7 J# x3 x5 ~) _& |' X
& R" }' \, U$ I! u, x+ c4 p
5 p( t" S |4 N6 ^1 q: D( a1 c
14.以下查询输出什么?
0 u2 ]* W' {: z3 E9 _
7 T1 j7 y4 j4 x# q+ J
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
; i8 L% \9 M( F. H+ {: V* [8 C) N
ON TABLE1.ID <> TABLE2.ID
0 F0 h+ z2 \3 E1 g! i" x
, G8 H# r5 _" B6 [+ T, a
A.TABLE1和TABLE2不相同的记录
2 t9 M0 ~% k8 T! t8 s2 b7 R4 f
B.两个表中相同的记录
6 D" }5 e+ H# K( H0 g
C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
' p7 o% ]/ s1 L% S( n
D.两表中不同记录的条数
+ B Y) x4 i, d4 e. v
E.数字2
+ S3 s! H1 Y4 L: Z6 _
$ `3 @. w$ B( e! z- V
( j$ s! d' p. a- q9 p
15.______能保证一组SQL语句不受干扰的运行?
) W P) r" m! x
1 T, ]! M. X4 X! H3 l
答案:____________
2 `& f' {+ R8 E' I( u8 W5 `0 V
& |* G% A0 L1 Q( Q4 v; Z/ t; M* \
+ C: h% Y5 ]! H& |9 J/ |- g
% T5 r& ]" y, v9 t
答案速查
/ `; r( L X! X. u
1:BC
* G& _6 L' F/ w8 ^+ Q- t8 d
2:WHERE
' Q: G8 M$ J$ }4 m
3:B
. ]3 L5 _7 _ m6 ~5 n0 f* B
4:E
7 C& B0 W3 g- }
5:BD
$ J6 T k& M$ h. k# z$ ]& W3 [. [1 J
6:INSERT
# q* K( B% a3 Z
7:C
5 a6 R0 o5 a8 t A8 t" T, Y
8:A
2 y/ e7 r; y3 c$ C4 z9 e: G. y
9:C
6 ], x9 d7 b$ H; I/ u. u. ~9 F
10:E
0 N8 `/ x1 a2 ?' \4 d$ ?& Z
11:C
' m' n) j& B# F/ ^7 f i8 n
12:E
4 E# H+ ?2 R8 o+ g- @
13:BC
4 _4 m# w" F5 \- f, C/ A
14:C
$ X3 d& M ~: A0 P
15:事务
9 ?" Y6 s1 P7 [ _& U" ]3 p! [
Y( W' v1 I1 T+ G v1 @/ h
9 i4 h* o* w) x2 S
9 y5 k( U U- N) \+ t' Q: \, W
答案详解
R/ _& o% i4 n. d& @. j5 o3 i
, h; T3 J1 l" e9 A+ H
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
3 F# A( h' n; I; M, B
# ]/ R+ q2 z8 e& T
2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
) W4 u5 a! H! h" O' b5 |+ ~; B
2 e: b, t# u: p! u1 Z, G, a
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。
. z& N- [% g" R" T1 a2 j
6 V. W- O, X; z' c& v0 I$ w5 w
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
h9 q# }8 I- _8 l# W
/ t( }8 K) e! _% E! l% H4 U- q9 m: I3 q
5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。
" g% J4 f) c9 T# B7 o( @( v
6 ~' i# k: R1 G# I4 X( O' ^3 n7 e( T
6.答案显然是INSERT。
: q+ t: V& c* n6 t. Q$ K5 v- g3 R0 N
; y% D8 g3 D6 {! y3 z/ I3 `
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
$ h' D+ N& h- G
, H1 \6 G5 E: m6 Z6 `# O
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
0 Q8 D* Q- `& Y. @
( |& t" O$ q4 S- y9 ^
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
( R, K: h# m' e5 `( U! {
) ]0 F' `4 O- l$ t" o( G2 Z$ ~- P
10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
" G m8 b8 t1 [( |
* ]3 Q2 |1 @# y2 R! Q0 [/ i
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
& |9 s0 h7 r4 a9 H& f
U( n- O/ @ b
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
- A7 f- Q+ U& f: P
( `! z. G' J: B0 p% ?
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
4 Z* `- T' n2 l% V( e
0 X" n- K. T' N/ x8 @# |: W
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。
7 X# v' `$ l( x2 ?' Z) |$ a& I
. C9 D4 k2 K3 y+ P7 u3 Z3 e2 z
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。
欢迎光临 捌玖网络工作室 (http://www.89w.org/)
Powered by Discuz! 7.2