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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
8 W& F) a: ^; R! N8 ?1 o9 tPHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
5 K, l7 J) x! F0 n本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。, F, @3 K6 J# n. {! W! \; N. e
7 }9 ?; U3 U5 q
7 b' O5 x1 o" H  r+ q
问题
- Q# a1 B- B0 D; h2 e2 D) o( J; }- n+ O# l8 r2 M& ~( {
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)0 z# u% J6 N3 s# K' K! [" ~
6 j- ~8 j, ^% [8 d' S3 e: ]" W
SELECT * FROM MY_TABLE
5 G  Q6 P# {' y% {$ T: j# p6 f8 z& F1 s' p7 k. [9 V
A.如果可能,用把查询转换成存储例程4 O. I! g- p3 t2 ?# y) }3 m
B.如果程序允许,给查询指定返回记录的范围
9 l! _' ~0 w) }) r7 [" a1 TC.如果可能,添加where条件
3 ]3 J: [+ v7 [' e; yD.如果DBMS允许,把查询转换成视图
3 L# ^( B' x0 i% i& g. ]E.如果DBMS允许,使用事先准备好的语句8 @  X/ S4 I. q& [. j
% v( }) y' V) ~7 v1 B+ J
- [4 A4 E, ?/ e8 j
2.可以用添加______条件的方式对查询返回的数据集进行过滤?
% q9 K6 D; ~# w5 i3 t& f1 x: e3 M  R
答案:____________
) [$ L  Z; y& {; T% q: v
) q/ T, b& i8 u% ?7 X/ _6 B" z4 r- c) k
3.内关联(inner join)是用来做什么的?( i6 B( U! B4 l1 t, U1 s# v' r* n
; T. I; E4 M; `) f4 }
A.把两个表通过相同字段关联入一张持久的表中2 r7 ?5 i; |0 |3 P' N9 w, U, X
B.创建基于两个表中相同相同行的结果集* ~* M. T: V8 N4 V1 w6 p$ B
C.创建基于一个表中的记录的数据集
, @5 Q1 v# w& `9 ]- O: v9 I* ]D.创建一个包含两个表中相同记录和一个表中全部记录的结果集, q! J" l  q2 Z8 ?1 `0 ]
E.以上都不对4 _3 v$ C+ L6 v6 N
1 u2 [/ o8 C2 J# p% T. C

* C" m) l6 P8 B: z6 e( {7 g6 Z4.以下哪个DBMS没有PHP扩展库?( N! N0 _" a; ~4 t  B8 X
9 v# Y6 a4 k  y+ i$ I
A.MySQL/ i2 U7 p. l4 `; o2 j
B.IBM DB/25 A& t; G) Q, W0 [# j7 h# H! _
C.PostgreSQL% d9 F; h5 C" V, w  ]
D.Microsoft SQL Server+ n" C5 a9 @9 N# m, H
E.以上都不对+ d# A9 h& K# M. d( i" F
/ C7 b; U' s' i8 T# H
1 m  n3 \1 H# Y+ A* Z) X+ M+ T
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)7 v7 M, ]9 {3 r
) v9 _4 Z( T7 b0 q
<?php
8 @$ `, L+ c; e1 |2 E% F$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);2 m2 Z1 X+ ]! h# A8 l) w
?>
; S0 H+ I/ Y- f, t+ N5 E
5 ~& I- b+ ~3 C0 U, S. h, OA.MYTABLE表中的记录超过1条
0 K; e0 K- s/ sB.用户输入的数据需要经过适当的转义和过滤4 r6 R. Y( G. T( l- q9 G
C.调用该函数将产生一个包含了其他记录条数的记录! v3 s9 f9 V8 R% I2 I  \% m
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除+ _1 T0 p8 E8 j$ p. A- S( k+ c" g
E.查询语句中应该包含数据库名' ^4 p5 t8 t7 V% d
, v1 O1 \) \  E( p% u2 Q

, t4 I" q% q1 _- ^: Y6.______语句能用来向已存在的表中添加新的记录。
9 [0 g! ?, C8 F+ @$ ?( V5 y# u* q- M5 O
答案:____________; N- w, [5 Q1 h, d; x# }, P

" N. b* C; O3 v$ ?( W4 D- e  F0 M9 s# [( T
7.以下哪个说法正确?5 c/ B, O( p: b& F
7 E" q4 q+ `- C5 D: e7 {( m7 U
A.使用索引能加快插入数据的速度5 f' g8 R( X: Z% P" l" h  W
B.良好的索引策略有助于防止跨站攻击2 E, B: L6 E# `3 p! Z
C.应当根据数据库的实际应用按理设计索引
- `8 r0 G( b$ l- s) m( K% X5 L, g! WD.删除一条记录将导致整个表的索引被破坏0 m% d. E, E6 a* g) F, l: p# |8 q7 ]
E.只有数字记录行需要索引3 L6 S/ `, t8 Q

, J9 S8 W# d5 X0 {0 ~' i! u( I7 z( }4 Z; z/ x& A
8.join能否被嵌套?* k: L8 h* L, a0 Z: g) X
# m( s/ U& Y# ^. G" ^1 _
A.能: S2 Y1 _) R- F# ?
B.不能& [, V/ l1 |/ p8 r4 T& u* s" Q

" S- u0 B9 K( |% h. a
* s- ?3 Z5 i$ r3 u+ g- t1 W9.考虑如下数据表和查询。如何添加索引能提高查询速度?! S' q0 Y# U0 j
6 V' D1 }% r  ?
CREATE TABLE MYTABLE (2 h; d3 o" j% g5 H
ID INT,0 A- Z" F! ]: n  u* f( s1 t
NAME VARCHAR (100),% T7 m) E: ^7 I3 _/ c% f, Q. o
ADDRESS1 VARCHAR (100),
  V7 z, n4 b, R$ c8 xADDRESS2 VARCHAR (100),( Z7 C2 q  e" v! }+ u) R5 Z% }, A$ T: Y
ZIPCODE VARCHAR (10),3 `9 }/ n  {/ w3 P) `
CITY VARCHAR (50),
" M* {7 e6 i. H$ Y8 jPROVINCE VARCHAR (2)
+ z) `5 o0 \# C) I6 d, E5 G)( r9 y6 |0 ]: @3 d) U8 b! E# S
SELECT ID, VARCHAR5 H& @$ h9 a; o7 M( n; H5 N: n4 f& w- t
FROM MYTABLE( u, T' _  ~# @" F
WHERE ID BETWEEN 0 AND 100. v) X' m. m0 M! t- y
ORDER BY NAME, ZIPCODE
: n/ ]2 e! |; I4 \9 _. m/ G3 }- T$ G6 i% B. @; Y+ Q- o
A.给ID添加索引  o1 X9 e: [8 E+ P; h
B.给NAME和ADDRESS1添加索引5 j7 U2 J( N% n
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引2 q' d+ x) k: Q& E
D.给ZIPCODE和NAME添加索引' v4 A$ O* ?* Y! d& E
E.给ZIPCODE添加全文检索
$ I( K1 z+ D* y8 ^! B0 o# s1 ]+ g& G
5 v' j6 {# V: u8 [! U7 i5 U! p: S0 V
10.执行以下SQL语句后将发生什么?! l8 Y1 d- ^0 a. }; b5 S+ }$ ]
9 z8 B5 q! X7 k% @. Z
BEGIN TRANSACTION
, i, C6 E# t+ l$ Z% C  nDELETE FROM MYTABLE WHERE ID=1% R5 j7 M) M1 ^
DELETE FROM OTHERTABLE6 {9 }6 |3 _6 t. W- b
ROLLBACK TRANSACTION
( ~7 q$ }( H& I
3 q2 V1 \; I6 `; a6 w. H0 Q6 k8 FA.OTHERTABLE中的内容将被删除! _1 ]- u7 p) ?7 q' I4 T: Q. U
B.OTHERTABLE和MYTABLE中的内容都会被删除
6 A4 J5 I. g$ C8 s, a/ W/ p& X2 w. i1 NC.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除; y  R. _/ ]  P& `- e+ _
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化% H& Z1 H7 u- r- Z8 `! T
E.数据库没用变化+ \: J+ ~* B( @
9 _; A( ^! s2 N) e
$ n4 t3 T. k, Y. U
11.DESC在这个查询中起什么作用?4 n, d: J8 O8 Z4 F
2 |! i1 ]7 m2 ~1 \/ ~
SELECT *
: @- X: B. Q9 M0 e. jFROM MY_TABLE8 R7 n9 w( g3 e! i
WHERE ID > 0
. J: ]6 s9 R0 X  d- UORDER BY ID, NAME DESC: ]( R; q6 T, N. O! d0 T1 N

7 y4 R2 f$ V( f. N( h4 SA.返回的数据集倒序排列
: o- s. r4 L% M+ ?* Q" Z# k5 D0 }B.ID相同的记录按NAME升序排列9 c+ G7 X/ n/ A$ }' _
C.ID相同的记录按NAME倒序排列
- Y+ A$ Z# h. E9 RD.返回的记录先按NAME排序,再安ID排序1 S: N' g: e6 H4 y2 ]0 Y) E4 C
E.结果集中包含对NAME字段的描述, a5 D3 ?! M  g# ~

) w; L/ B5 k2 v2 X% E6 s. z" z/ w; u5 B% t" r' n
12.以下哪个不是SQL函数?( V/ b8 @1 `3 R& ?5 l
1 B9 [! E5 ]; h* o  E# j7 Z
A.AVG
9 \1 V; l$ b# `9 h5 UB.SUM; z$ k4 P. w2 W9 w4 h1 ~" e
C.MIN5 g" K7 s$ |8 V# [3 Q# ]3 s
D.MAX
" p" u9 X7 C: m+ h1 EE.CURRENT_DATE()
" G9 f- [; l0 |$ O5 x8 E& B4 J8 H! A. I$ o; O
- O! l5 J3 e4 A
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
. B# o% n+ Z( U( K+ j3 V
$ T4 O# K! B. i# H+ aA.该字段必须有索引
' e# j1 L/ @1 W  K& Z4 K9 _; `B.该字段必须包括在GROUP BY条件中
, R6 p( A- |7 z' Z; gC.该字段必须包含一个累积值
0 a  ^7 e* r* i/ J; E7 ~D.该字段必须是主键
! N% @$ e3 F* a2 H! ^; LE.该字段必须不能包含NULL值
# l0 D0 A& w$ v/ U0 r9 m$ G6 O6 i, N" m- D: X
4 L6 @% p+ ]; y! b/ H
14.以下查询输出什么?, {1 [* N, Y' ?1 u+ W+ |, J  `6 `

$ y  e. f$ i& b& e6 [SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
  M7 D# W" O1 M# ?  F1 W8 \ON TABLE1.ID <> TABLE2.ID* d$ f: j  C4 G; X

. H# l7 i; e" x7 ]% A/ FA.TABLE1和TABLE2不相同的记录' t8 Q3 i9 h) R) n2 b( |( C3 K
B.两个表中相同的记录
) y! u2 O" _) C% A5 a) ]C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
/ \  s, m; X$ M+ M. P4 GD.两表中不同记录的条数$ v/ P/ O2 T' y* K6 B( F6 N  R- U
E.数字2
$ `/ g* e& x8 e8 p( |5 }5 O3 J( J- ?- N% t

3 y$ h  O( y. ^& i15.______能保证一组SQL语句不受干扰的运行?
1 N- [8 m" u$ T+ l! P* i9 I6 x8 M1 {/ s! p
答案:____________# R$ C$ z/ u$ i( j

  {6 w+ a/ U/ D9 x( v1 |+ D. d8 }' h. G

* x7 l* z, t3 |; t# C% P答案速查
9 e- ]* Q# Q! c  L0 e1:BC3 ^9 a8 H" S! \) C! A
2:WHERE% i( S# I3 A2 N6 _' E4 {% |! A
3:B
4 p! ?9 n0 B6 o4:E
; x4 {+ m; P7 a, J! b* q5:BD9 N& R* m3 c* u  }" I! D  ]. a
6:INSERT. [7 [8 \" z* E1 _
7:C5 n/ D) ^2 r' M  D. J2 K
8:A% W) R( I: a, w( [& @% d
9:C. Y! h3 v7 G; @) D' W# P4 ^1 \( S
10:E
2 h3 R. `" w$ U" g; A11:C
; C) f, C' F# \  Z. H! }) D0 f12:E
1 o/ G' T7 q8 j/ R13:BC3 W0 @; f! a6 [2 W% `# c
14:C- ~4 C; h0 L( m
15:事务
0 k  Z2 m2 o2 K8 `3 B0 N& h# O' i9 ?) A: j$ z

: @+ b  g" }* F! K+ C) E7 m% @9 I5 v, A3 W9 b/ W+ T* ^
答案详解' u' Q1 Z5 C! _! X7 J
3 x' I* J( Q# N9 z  A) r
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。" \( G: u- {7 U2 k" }; W' c

) d1 j; i9 E8 y- g) x6 M2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
( i5 P& h& u& b9 e
2 F2 ^% \5 t+ d6 ^" N3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。# k9 _7 R$ w" i- S. Y8 r

1 h/ o7 y6 S9 ^+ l7 N8 `4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
/ A5 z+ U; t2 M/ |( ]  k0 ]
( }8 @; b; ~' g/ R5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。
1 K: O, u. E0 Y, o
# M7 Q9 m) ]2 s% `9 X& a6.答案显然是INSERT。
! G' R+ |( ^" J. J; Q/ V4 T) Y6 K0 ^5 c9 w
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。) ]- `/ C' I9 [' a

8 \' r9 ?* R" A9 Q8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
7 j" X6 M1 _; R$ {  A3 M# Y0 V0 |# _
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。3 r7 S$ v  t; w' i" s6 [! T; T

5 `* U. R: |. Q% s7 d10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
; B6 H: t2 ~3 |8 q" u$ @& X, _6 Y: V/ Y/ z$ \
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
4 r: M" K" I+ t  e3 B3 e5 a: e/ h: M+ H5 p9 N( ]
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
: I, {! _2 P4 z, ?0 Y; C# a; O) C) n: a
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
: V. R; V) T( l) g' \/ `; k  [1 L
" u  g8 S8 M4 a" d. g0 Z: i! \1 X% ~14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。2 |: {* E) x. u
0 E4 P% e! p5 Z! S" l& q
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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