返回列表 发帖

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。: ?7 U8 c. s/ D7 Q) i) x, e% S
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
. J5 g* h6 ?8 {! T; b本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。) u% j1 e; p5 I+ v7 K5 V8 ]
8 q( W5 m$ W$ r1 T

9 U0 O1 Y" m! d! ~7 y问题
6 P% h: Q3 a# \9 [
" Q$ x8 X6 O4 I4 _' ~1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)$ \+ T+ h6 _" l8 [0 a9 J
( _9 C9 R! }& B
SELECT * FROM MY_TABLE
8 V, k0 u) Y" W" K/ J' J- X7 Y. u* V7 Z  o1 X) i" r5 ]8 P3 P! D
A.如果可能,用把查询转换成存储例程  D1 j2 D+ o4 t
B.如果程序允许,给查询指定返回记录的范围6 x( @- I3 J4 w7 R1 |& I/ b0 w- ~
C.如果可能,添加where条件' m9 s; ~! @; P8 n) s
D.如果DBMS允许,把查询转换成视图  h2 w7 ~" s) x9 G- W5 s
E.如果DBMS允许,使用事先准备好的语句. }) v/ f! O& K3 F1 @
6 C( d! p) R6 g9 L& D3 o. d
8 c* o$ [5 p; [1 r
2.可以用添加______条件的方式对查询返回的数据集进行过滤?
/ F4 }' y+ v# U6 G; w: _6 ?
2 f- h& n- F% h4 j2 V5 L$ M答案:____________/ \9 K0 E. w: e& O% I) q9 {: u
0 k. u& s" o7 q' ^, j5 u

/ D+ o$ b$ H. i) o  q3.内关联(inner join)是用来做什么的?8 h5 X" |' J  m* ]; u( W$ A
8 z: W! o+ q: C9 P/ }) Y7 B- G6 z
A.把两个表通过相同字段关联入一张持久的表中
7 N) @& G- c0 P& Z8 R' h' J3 N6 p1 EB.创建基于两个表中相同相同行的结果集, C2 r7 b6 {$ n3 e$ [# A
C.创建基于一个表中的记录的数据集
) j3 {  F4 d8 Z3 @. k9 RD.创建一个包含两个表中相同记录和一个表中全部记录的结果集% {% i0 [1 G1 \3 e4 ?
E.以上都不对
+ X/ l' z- A+ C" S# i1 ]# b8 ]' }
5 s0 P8 O& l% R4 b2 T; H
4.以下哪个DBMS没有PHP扩展库?$ t9 s, M3 r: u* B1 d

6 s) F8 N  C2 k5 n& o& t' WA.MySQL1 m. d$ S! C1 V  |3 s( ]: A/ x
B.IBM DB/2
9 ]3 e* t% o4 B9 aC.PostgreSQL- L# H9 g5 c  X
D.Microsoft SQL Server
# A9 r; C( k9 ?6 {( sE.以上都不对
2 ], [+ ?* u8 Z' I( R/ n( e
- {. t# n0 P0 R/ m; U% X- D. g- j; G3 v& }% [. ~
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
' n( }% x$ H  W  K
5 q) j6 P- e( W<?php
. _% w, I% d4 H+ [! [$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
: }' j9 c$ B) Y. E$ c?>  s- Y2 l1 U9 y; z6 r; L4 o
, h8 d  U- h& L- H& i% d& h3 W
A.MYTABLE表中的记录超过1条
7 [6 U" {) T. ~& f+ \, `' z. dB.用户输入的数据需要经过适当的转义和过滤! `  w8 f# S% T" V9 c3 x
C.调用该函数将产生一个包含了其他记录条数的记录
$ `1 J/ t, W& TD.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除. s0 S/ p& U4 r7 a2 ^: e6 I1 f
E.查询语句中应该包含数据库名  l  `/ k. M$ E& E$ u

6 F* w6 d+ ^! Z  H  N5 X7 Q2 y, W7 k3 m. c. N
6.______语句能用来向已存在的表中添加新的记录。/ i9 l- X" p: x3 c, Q) r" I5 [  r

9 O( a: u! F3 n  j+ U3 O答案:____________
: W7 g) \; n( D& I, n7 \) O
6 _4 n* T2 X# \+ Q- O! G
0 |( M: T3 ]& y$ t+ Z/ |7.以下哪个说法正确?9 U) L) D0 p; @8 U' q% _

8 T3 }  k0 Q: k. l% K/ ?* KA.使用索引能加快插入数据的速度8 F4 m3 T* j- w3 G: e- i( C) J
B.良好的索引策略有助于防止跨站攻击
7 H0 t7 K8 m6 `5 pC.应当根据数据库的实际应用按理设计索引
/ o$ I  r( b) @* o6 ID.删除一条记录将导致整个表的索引被破坏
- d; v& ]6 m% p, A; _6 dE.只有数字记录行需要索引$ W& c% o/ b# X& _$ d
& `) @) S2 x$ Y: b7 h

. D: V. X- ~) |# b' C8.join能否被嵌套?
% g+ X) e0 M6 g) l2 a" ]+ K/ F( G0 o+ k6 f1 v5 m7 r8 H
A.能# [7 y+ f/ t2 H
B.不能
( F1 e. i  G# g: A
0 H% t0 v% b+ Z  E, |# R- V: q: M
9.考虑如下数据表和查询。如何添加索引能提高查询速度?+ M* K) w3 ~! e' `
# {7 }$ ^  c3 s
CREATE TABLE MYTABLE (- X9 h/ f- l7 G- ]; c, i( ^' Y$ d" ^
ID INT,% m; _4 j" \1 e: m# O3 h. l
NAME VARCHAR (100),% }  X2 ^$ d4 {9 B
ADDRESS1 VARCHAR (100),0 @/ c1 ~7 Q% _) P# t- S: V
ADDRESS2 VARCHAR (100),
! T. w7 ]& R* {ZIPCODE VARCHAR (10),
/ P7 Q5 c; R9 Q0 D/ _% [& ~+ o) KCITY VARCHAR (50),
/ R3 k5 \& o8 \6 P* z8 Q9 ^PROVINCE VARCHAR (2)' A2 B- R6 [/ ], ^/ D. [5 X# p
)! F( y7 s2 d3 k( @: \% g
SELECT ID, VARCHAR
# s4 ~( B: G: e/ ]FROM MYTABLE
9 C. d7 `& X9 E$ lWHERE ID BETWEEN 0 AND 100' l1 `$ p  }  S6 g/ l1 ~( ~- G* I
ORDER BY NAME, ZIPCODE
" Q$ B6 w  Y. S7 Z5 |. V1 k3 j$ u) ]4 b" Y+ U
A.给ID添加索引* I' g/ H" T- [" `! ]
B.给NAME和ADDRESS1添加索引% \% N. |- o8 E  y! s4 a
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引  H8 Y/ `4 g, d% U% {  I$ x
D.给ZIPCODE和NAME添加索引
/ y7 }) i! _( {0 F5 Z2 z  TE.给ZIPCODE添加全文检索
) {$ e1 h" @: T) \3 t+ v
, G5 U. H, u/ k5 U" x$ M9 [  H
6 V* E) r  l( P" K" }1 f10.执行以下SQL语句后将发生什么?* d" f9 M" G  n, x# s5 d; c7 r' t/ n  d

3 ~! n+ h- O8 JBEGIN TRANSACTION$ r9 a7 ?$ z% S( Z
DELETE FROM MYTABLE WHERE ID=10 h( h  g, F% O  n
DELETE FROM OTHERTABLE
4 e0 _/ \7 a' s& UROLLBACK TRANSACTION! h% h6 M5 J+ l$ F& j4 o
8 D2 V9 q" u" I6 m0 j
A.OTHERTABLE中的内容将被删除
( L8 G4 |2 t5 q( z' kB.OTHERTABLE和MYTABLE中的内容都会被删除$ E7 ?3 n, w4 Q1 O( s% q
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除* G( X7 p* h" V% M% Z
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化( n2 s- H- D$ v  Q: z. i6 t: l
E.数据库没用变化
- o7 l8 |( |+ M' @  J) |
$ ~& ~" c; {# |  U- O( T
" _- P- ^' p2 _) }11.DESC在这个查询中起什么作用?) X$ ?, B1 Y2 R7 H  ^- c2 Y# H
! N# B8 ^. e1 p+ y) F
SELECT *
! I" p0 q( S! EFROM MY_TABLE) e" r# U- ?9 l) \: s, y( L. {: U
WHERE ID > 06 t9 y2 s, D/ Z
ORDER BY ID, NAME DESC) \" U0 k# i  M& ~/ ]/ h" y3 t
' v/ e4 X$ w9 ^+ B- s$ ^+ E% T% b
A.返回的数据集倒序排列  W' y% ], C8 S3 P" U
B.ID相同的记录按NAME升序排列+ W" @* R/ G2 `3 R8 v" Y2 U
C.ID相同的记录按NAME倒序排列
' ^/ O6 o: p  P+ K& v' `D.返回的记录先按NAME排序,再安ID排序
0 [$ Z  X) L# V5 BE.结果集中包含对NAME字段的描述+ J& l4 u' a4 a( j$ m& G

$ `# f2 C4 p, M9 @8 {8 @+ a4 L2 J
/ Z1 T; K0 d" q12.以下哪个不是SQL函数?$ i' t/ ^. E9 F/ B% ?
" H+ L0 T$ t( \
A.AVG0 @% t6 A1 k, F6 p: U
B.SUM' h" l1 [& j' ^' ]
C.MIN; c3 L! e' q( u& g# d: N& a5 T+ w
D.MAX( N& S8 o: |# c
E.CURRENT_DATE()9 B" O/ O( I) E* O: @& L: N/ m

3 F5 W4 v, ]3 k4 W! i# g- b& `# Q# A- O0 _; e9 q/ @
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?  D3 d8 E; s3 K9 n, A  _

) o' p$ \* i- C- X" |8 u1 ~' AA.该字段必须有索引
7 S$ Z  u5 c+ k% D+ P' T+ X+ gB.该字段必须包括在GROUP BY条件中' e' d9 Z; q7 S0 n& X
C.该字段必须包含一个累积值
( V$ w, u5 V3 P2 n3 }D.该字段必须是主键
/ y' u9 a; |7 ~  ~: pE.该字段必须不能包含NULL值7 ?* C% m( @/ f
! W6 s3 j3 S7 u" ^. B

' P; v9 |+ ^/ ?* C$ R14.以下查询输出什么?
. R$ ]1 Q6 O8 q( F8 g3 n8 C' M' `
% c: U  P# A3 \9 m  e$ L5 ^" qSELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2% ~; G9 _4 h$ F4 K" S, J
ON TABLE1.ID <> TABLE2.ID+ O( d8 l/ r" c+ M) S" |( y2 ^
! C7 X3 q/ j9 S3 F: m+ u- s
A.TABLE1和TABLE2不相同的记录5 ?/ ?2 j2 a/ U$ [$ P* O) T6 n" ]$ s
B.两个表中相同的记录7 P! j3 E, W" Q3 a' F. o2 V% g
C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数& ]2 r: C& ^/ d! {
D.两表中不同记录的条数6 e& n& ?% k9 M+ p
E.数字2# }; J3 l. V2 h( p* h
+ N# K" `3 r' z( P/ L0 k' N+ A' d2 r

: l7 t, K. T% l# F! @- k' ?15.______能保证一组SQL语句不受干扰的运行?$ l0 _: m$ t$ O: E' ]+ D4 r0 h, [3 t
) i, x; p6 d3 y3 W4 H7 ]/ I
答案:____________
& z* `% k* d4 p+ M, o7 y
% W* ^1 d0 P' I, F( l3 n- A4 s8 S$ l4 U' F  V
# r" s9 Q$ L/ Y4 \2 b" F* g" f
答案速查
5 Y8 ^  E% ?  l. ~0 [; ~1:BC
7 {3 y4 x8 P7 r0 T9 P+ z) `' H2:WHERE+ i* B( l) k# g
3:B
, K7 J5 M  p9 S. W6 g. W4:E, i/ l( t6 r- O  X% ~
5:BD
# g& f6 x3 N2 n2 b6:INSERT
/ p" ?. }# Z( q( P7 s6 o/ J4 Q- p, L0 P& w7:C
. N% G4 n1 r' K' l( X8:A
: P, t) F5 G# _1 ]4 E9:C
( \/ D# S, N( m% W. T$ i10:E& B5 l5 W, `- ^' ], A
11:C  ]1 w+ W4 p  _5 C( g& l+ u& c0 a( C
12:E
( }# K" a1 O; {, E13:BC
' ^! R' d/ D( g# X! D14:C
$ P& [# e# g" u; W15:事务5 U1 g  u- s5 u: n
0 }4 N9 M$ N0 F+ @+ w2 b

) e4 H  M' @% ?! L' l4 r' S7 p2 q- f: f4 n
答案详解
" L* S& |) k' g. q' m% L1 @6 m! q' {# ~; l" j3 `7 s
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
. p4 b+ j1 Q4 p2 B( C+ \; U
2 K5 z8 E8 a1 T& w, X2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
$ N  H7 @. f+ F# `' m: q& A3 ]  o$ q" z5 [; M7 `8 D
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。- }/ s) q: `+ `1 ]5 K% J
% w8 m+ v: @5 G, k7 B7 a
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。! x) ~, J6 v+ r$ L: h% O

' U% D& d5 I8 N# k5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。* L7 U* C( J" t* W

: E+ g" s8 ], {% R/ e) |6.答案显然是INSERT。- R4 T6 l. N0 O
. v, _9 O2 a4 ^1 @2 J* m
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
1 ~; G- @; m6 |" Z, t+ I7 s0 F( D! X' L% q3 R: ]
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
$ c7 m  `- ?9 c$ C
! C5 V$ f, M- U) \) d9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。# u* {1 H. U) x% \
# D: \4 n& \1 G5 n& }9 L* U! O
10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
& ?5 g6 J5 N" v) K
: C; D( J+ Q, E; t& [11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。9 i# J( H: ]; R. W" M9 g
' p% w: w: _1 Q# N4 U( _# x% Z
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
4 p% |  y, T( {/ a6 A! {. B3 S+ J& f$ h. r% a' b! M$ x5 m* l" @
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
2 H1 S+ t3 q) d8 s' y( J" R- [  c5 Z$ H+ G
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。
6 ]( H9 Q5 w( T1 g; U  f/ c5 _  k' W# e3 O" S0 _4 Z& q! e0 q! c
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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