  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14191
- 金币
- 2386
- 威望
- 1647
- 贡献
- 1334
|
[Zend权威认证试题讲解]第九章 - PHP与数据库
如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
5 f) ]: v* \ b; p9 E2 KPHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
6 U1 q6 _2 M* ?7 h" ~) C本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
3 O# y D5 G) R" n- e" Q4 L: Y# _- N/ z6 H* B# R" K, n+ _. G
9 U3 p9 T Q3 ]* V- A U问题8 z1 _+ X/ N4 L( t+ p
+ K% @6 }2 z5 c5 P. i1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)8 i( G4 u: g0 e C
$ l7 N% @% J2 v3 H0 P1 rSELECT * FROM MY_TABLE
' w9 `4 d2 i: a2 g6 j9 E1 z" f( \/ `% L8 _% D. _( l- ^5 ^
A.如果可能,用把查询转换成存储例程
& q+ o3 d7 c( ZB.如果程序允许,给查询指定返回记录的范围 Y& V: T+ Z. L
C.如果可能,添加where条件/ x8 W# O0 V8 x. [
D.如果DBMS允许,把查询转换成视图' ]/ F M6 p' v2 m' H1 m- k* k
E.如果DBMS允许,使用事先准备好的语句0 a' m1 F/ O, w6 C) M
2 ~- V' }# u1 k+ U* W
$ G) s5 {* f" |, u1 s
2.可以用添加______条件的方式对查询返回的数据集进行过滤?) O/ t% `) H( ]/ }' j4 O
( p; P4 K! a& i' L4 w% t答案:____________
0 ~: ]1 F! k" E4 p
5 t, {, {/ x, T3 n3 p
$ F5 P9 E' ~5 ?/ m3 N3.内关联(inner join)是用来做什么的?! I2 Y5 ]9 d# P/ a0 P0 v5 K6 V
4 p4 X' r2 i I! A
A.把两个表通过相同字段关联入一张持久的表中
! W. m5 _ n* g% S5 j$ AB.创建基于两个表中相同相同行的结果集# `$ e' b& y" K
C.创建基于一个表中的记录的数据集! x, H7 i9 H- ~( G& Y3 \3 H
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集8 O7 d( b v3 D( @& c3 t
E.以上都不对
. x6 C, F+ D- h- G- T
4 Y* h5 u5 |* _4 A0 ~1 E! x, x: z( i l/ e2 J
4.以下哪个DBMS没有PHP扩展库?
7 k- {- U! K/ C5 {! B9 \
% `- A. K6 N* v4 bA.MySQL+ f+ @, K. Z8 W" o2 o6 i+ d2 R
B.IBM DB/2
; ~, z' n5 }5 q! d9 g9 W. ]C.PostgreSQL
* N& e! Z: z, a* Z( L0 kD.Microsoft SQL Server; i1 M1 B6 b& n9 J# j0 m% M
E.以上都不对
$ X+ L) d2 \' a4 I& O, k: n
) ]. [/ E/ b: ~2 U2 @" l
& W0 M! H7 w' o0 ^1 C2 M0 w. H5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
8 w: @! @4 [/ z
7 E1 z; P, ^/ J<?php
# J- | l. f: ?% \- R$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
) Z( ] a; D4 M: O?>
4 J( G2 T3 V7 u* f$ D
9 t8 e. Q! e' X aA.MYTABLE表中的记录超过1条, ~3 f3 [7 c4 p, o/ ~9 h7 k
B.用户输入的数据需要经过适当的转义和过滤5 }) v9 o" W1 ?" ^) O
C.调用该函数将产生一个包含了其他记录条数的记录
" b, K0 H9 F; K# U0 w( H* mD.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除4 Z$ M* D: Z# C3 A; ?; s6 g
E.查询语句中应该包含数据库名
* M! w0 I- X# {: A+ ?. ^ B
9 Y1 u% V# _/ A9 d* c' G* c" s5 L
6.______语句能用来向已存在的表中添加新的记录。9 P8 {; _, Q- B' E& K+ e
+ y7 B! R+ i! F/ ^& z2 k
答案:____________' Q ?+ w, W! M' j/ P; a0 Q# Z
7 l( E M1 @5 {3 N b3 J- g: k
$ }" g% e8 {0 R l. W# L7.以下哪个说法正确?" E( m4 y# \+ o7 _/ T4 V* Q
5 {, X! j% o5 o6 @2 f; r
A.使用索引能加快插入数据的速度
& e& v# h& `8 G9 j1 CB.良好的索引策略有助于防止跨站攻击& V. ^8 q. s3 M) e! Z8 X5 q
C.应当根据数据库的实际应用按理设计索引
) h& S$ e4 F9 o# ]) @9 KD.删除一条记录将导致整个表的索引被破坏, Y& c5 r+ \8 Y6 z3 l7 E: Z5 C r
E.只有数字记录行需要索引# b: }% t$ |, }, l* Y/ t, }
. v9 F! W& I4 T3 Z' R: R3 o1 A/ [. ^
, d" ]/ h5 D( G: b! u8 X
8.join能否被嵌套?
- ^0 S) ^8 Q7 M6 R7 o
* b$ L; j8 A3 @6 r& wA.能
/ y0 J0 ~! ~; j$ uB.不能
6 c y2 q4 v. x9 [ c) [8 _/ r* ^" q h$ \, B% F5 T
+ X/ O4 V) L( ?$ I2 Z& y0 X$ v* Y' J
9.考虑如下数据表和查询。如何添加索引能提高查询速度?
% }. z \! T( X! q- [7 Q% @& x0 G1 q- b- W% Q* j2 |
CREATE TABLE MYTABLE (. e6 |' V/ a3 N1 E5 T
ID INT,
- V1 N, [" s0 p! xNAME VARCHAR (100),
5 g( K, a2 {* N/ ~" S$ GADDRESS1 VARCHAR (100),
: E: H7 M1 |5 ^5 U' O9 x: Q5 MADDRESS2 VARCHAR (100),0 t! @" D M+ R5 C- }7 M: e$ f; H7 e
ZIPCODE VARCHAR (10),: s# Z I. g) m1 l0 N8 {
CITY VARCHAR (50),
; z" _5 \8 h. V9 n; b I% b2 C9 d; ZPROVINCE VARCHAR (2): Z7 G0 [( e& C9 [/ _
)$ A; h9 M5 `) L( b
SELECT ID, VARCHAR% j* L+ E1 r; T X
FROM MYTABLE9 `% `3 k& `- z3 x
WHERE ID BETWEEN 0 AND 100
. \2 T4 ^& J) S( j2 Y+ o# rORDER BY NAME, ZIPCODE7 T1 B& j2 y1 \3 i, ^3 Y# z
+ @: Z$ v" b7 z" C0 `A.给ID添加索引7 J# l1 v/ F8 e7 m* C* x" h) q
B.给NAME和ADDRESS1添加索引8 [, ]: a' N3 G0 f& u/ l# ?
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
* H, X" A7 k5 x7 `7 f) yD.给ZIPCODE和NAME添加索引0 {: A9 A6 i9 f8 V
E.给ZIPCODE添加全文检索: y, q1 `1 B* o9 a6 L& x4 o
. o, r ?, L: x5 V' q8 b- G7 W% `0 w
8 z" ~6 a2 R6 k8 V10.执行以下SQL语句后将发生什么?
) U2 M) a. g% n/ S d! \! k- m f7 D, H4 I7 c1 K
BEGIN TRANSACTION+ `3 y* x: E W+ V' H
DELETE FROM MYTABLE WHERE ID=1
/ Y* ?2 K- W8 X/ }1 Z) O6 `DELETE FROM OTHERTABLE! ?3 [; i# w v& c8 `
ROLLBACK TRANSACTION
) {$ i+ G2 a) A: \, g) B" B E- C: m$ U5 M% m' z7 P
A.OTHERTABLE中的内容将被删除) T" S3 e( w6 T3 R8 c+ b% O
B.OTHERTABLE和MYTABLE中的内容都会被删除
3 F2 R) V( a; e) M1 _3 z% [C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除 ^/ h" [( P8 Q9 K' M1 p7 E8 |
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
1 ?5 B+ W$ B# V. v+ f& yE.数据库没用变化7 g5 p3 L$ T8 x8 |6 j9 K; c% v D
5 f7 o- v; |( \, x% ^3 L: a0 w2 b
9 w* j) X* f4 ^8 H11.DESC在这个查询中起什么作用?, ^# w* e, f6 i
' h* X3 Z: `# o; m* q* Y6 c2 k U2 B
SELECT *7 |7 V7 i* S7 g% I" M7 g9 M1 x! i% q
FROM MY_TABLE
U, U: K0 d) EWHERE ID > 09 d1 M, O V9 K* N
ORDER BY ID, NAME DESC) ^, x6 h) N5 W* n1 v: e
" Q( r* j7 F7 g3 K3 V5 S
A.返回的数据集倒序排列7 N* D# [( R. u8 X5 m) ~8 ]) z
B.ID相同的记录按NAME升序排列+ t4 g y/ V: o
C.ID相同的记录按NAME倒序排列
4 X8 K" W) e& w4 b" JD.返回的记录先按NAME排序,再安ID排序
( I5 A; {( k# |" b3 iE.结果集中包含对NAME字段的描述( ~7 i2 X- c& W) x$ Q( `6 x6 ^
" p3 n |% v% L" X) d4 _
) h! s! k+ d! D" b& I
12.以下哪个不是SQL函数?% x: Z" j# a/ O# ?9 Z' e+ _; v
9 x8 p* x9 I- a! P3 {( UA.AVG
4 A# M" _7 p ]7 I" [( @( jB.SUM
L A2 a r0 T+ p" J1 eC.MIN
9 G, m7 s5 o+ M- z$ bD.MAX
1 @" u/ l& s/ L% qE.CURRENT_DATE()
: O; u- R' I- f! L7 c
) a. u1 O" r4 c5 W: v8 \9 {# F7 y i0 p6 q. h9 C5 H# s; d' b
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
- X4 L9 y" {9 j' J
: k" k- C* G. eA.该字段必须有索引
! Q! ?+ H& {% o* ^5 [B.该字段必须包括在GROUP BY条件中
% f# A K1 p5 J7 r( _* RC.该字段必须包含一个累积值" f* S7 _, ~: v2 s/ ]
D.该字段必须是主键1 W8 ?/ q! k, w- u! X
E.该字段必须不能包含NULL值
5 y4 i2 J* _9 M" p* \2 y) [. f e# k x3 G: i% X% n
4 A' c: o2 e# V* Q14.以下查询输出什么?
) [3 R. L$ [5 }- k2 b
A. @6 w( L; m6 O! pSELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
$ [, s! o' T+ D8 ?4 yON TABLE1.ID <> TABLE2.ID
Y V4 H1 D8 M( A9 V, ?8 q" A% V- a. K8 j
A.TABLE1和TABLE2不相同的记录. F# f6 X, r% p3 n' d) R
B.两个表中相同的记录5 w9 U' s8 P- O1 T5 ]) _
C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数* A+ T' M. M5 L
D.两表中不同记录的条数
# R: A6 P' ~. ]$ i" jE.数字2+ z* ^5 C# r9 |( z- j3 D/ i
" X1 s" @3 U5 q k3 Z6 W
9 m e9 a! h# T; w. s$ Z3 B) x* q15.______能保证一组SQL语句不受干扰的运行?
! m7 p1 a) S" R0 L; t: f+ _- a, _, [5 b
答案:____________
" I$ A H& Z2 O, l5 Z0 ^1 t
; N3 o3 K I( P4 N9 T& p2 k ]0 e5 ]1 Y) [/ |
7 l" d1 a" f' S: v
答案速查" M7 Q% @8 g4 m$ {
1:BC; _4 F: t: h! r& V* }1 ^4 W
2:WHERE
+ ^# U5 W) m2 M' Z3:B
, }6 c( v& T" o ~5 r9 Q5 k' A4:E
% g' b- @- q Q% l5:BD7 q6 @; Q3 F) S9 W+ E# t1 ? P; T
6:INSERT
2 j C( J. ^) A; i$ H; v7:C
: T) L: E4 |4 y# e6 g8:A* ?7 Y4 @7 k6 n" N/ m
9:C: F9 Y4 F* G5 x. o/ e2 Q: f7 u
10:E
1 C9 d: h, d& y$ s8 H: e7 }% m# m11:C3 O; L) Z$ x/ g& \& J; _
12:E
/ Q' t3 w$ d9 o& n( `13:BC
. |) ^' k3 {1 x1 J# B14:C0 r- m& Z7 S5 ?$ u5 O" ~2 n
15:事务6 O3 y) }8 z- n: O
8 j$ ?( f4 c6 U9 M2 a9 T2 ` Z+ v3 G
1 a4 J9 v; Y. S5 M答案详解
. I3 x2 L5 V, Z3 ?- d U# v# ~3 R; {7 C3 `: z: ], W: T' ^$ C2 O
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
0 n/ r2 Q3 Z$ i! h) M* |' x
& t' S J2 m' N* W0 l2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
# y/ Q2 s: S! W; \" C v
8 E8 j) O3 \4 T: R; Y3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。
8 P3 [8 H, C' s. J$ I& e
& F/ p- g* W: P5 j. j4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
1 C/ h1 d8 B4 E c9 W9 h& T1 _! F( e6 o* f& L# o7 }- {: { @" _% l2 ]
5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。5 h0 Z8 V. |6 t7 F/ t
8 e4 e1 { B+ e, q6.答案显然是INSERT。& r9 i+ C3 K9 e6 E
- b) N& C$ v- i/ |/ d) r N/ q- }
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。& e5 Y8 J; f. J3 D, ^5 u
1 O2 A( h, ]! o0 E1 V4 S/ ^
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。 o3 o% x( B) _ o2 D
j+ d: O5 [6 W/ k# K( M* K9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
" |# l9 X% |1 m; W9 k
) v' j+ @) ?( l: L) {* K% w5 G10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
) T' p u: c' m* I1 g3 x, O' x$ E2 j
1 y4 Q! u" q# `" ]* G. A/ v11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。2 t) O" L! }1 S7 X; \0 }) b! T
. O6 i/ t- }4 U% J; S" ~- L/ ?5 b
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
+ \% T$ l" c4 v8 t3 K2 n. v6 u0 y/ T- O
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。; u- H* Y7 t( r
3 g- Q( ` e3 W! |& I
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。
& `1 H- W+ ~9 |- ^% D/ k1 C3 |/ u- A! p5 ~7 u
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。 |
|