Board logo

标题: [Zend权威认证试题讲解]第九章 - PHP与数据库 [打印本页]

作者: admin    时间: 2008-4-17 14:44     标题: [Zend权威认证试题讲解]第九章 - PHP与数据库

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
  O# Q( T; ^$ Z$ u+ TPHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
- Q9 V, d' O5 w1 ]) w0 u本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。$ E* ^3 d0 E( ?: B* [7 }  q

. M3 f5 a. T; ^* `$ }4 \/ B1 W: ~2 P( G2 j
问题
3 Z  L2 w. V. x9 J* ^
& m0 B: E6 r  x1 Q8 M& C1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)" d5 ]6 A) D# b9 |$ N9 W! m2 |
3 {  c' X4 L. F3 |4 @, \
SELECT * FROM MY_TABLE+ v* x- V4 R' J. E5 c1 _
! P, i% V% {% y# r, p0 }
A.如果可能,用把查询转换成存储例程! E. r; }, F- q6 t8 a
B.如果程序允许,给查询指定返回记录的范围
. O9 f8 `, T& y7 hC.如果可能,添加where条件  M) i; p2 C. d) Y6 Z& |- g- t
D.如果DBMS允许,把查询转换成视图
% G/ T& q+ P: b$ v! F" n* U2 DE.如果DBMS允许,使用事先准备好的语句
8 k5 V! T7 U! T- ^7 |9 L
; H; X, I5 x4 B. H
- a5 y8 Y' Q1 P5 n! h" z* y2.可以用添加______条件的方式对查询返回的数据集进行过滤?
; J1 d/ L% m) L2 ^. W! @2 u
9 n, K+ |: g1 w3 _8 t" h答案:____________0 c/ B3 `& S: r

/ @6 h8 e2 Q7 q6 x& O# |2 U2 e
: P% J% j) m. f4 p' n, m  }3.内关联(inner join)是用来做什么的?- {/ t  ^. r+ z1 O1 [
4 t% z8 n( {) B+ j( p
A.把两个表通过相同字段关联入一张持久的表中& [; E5 |6 j3 U
B.创建基于两个表中相同相同行的结果集8 F7 \' T+ f2 s* ]
C.创建基于一个表中的记录的数据集
7 Y9 p4 p: S) e+ }4 {, @D.创建一个包含两个表中相同记录和一个表中全部记录的结果集6 H# O/ m+ ^3 v/ g; ~2 \; W9 W
E.以上都不对
8 {& e7 t/ H* K9 C& j4 l
' U8 T' l) P2 |# o4 x$ A. X- f+ t& z: D* F; u; R% @' G6 W$ W
4.以下哪个DBMS没有PHP扩展库?
9 \: C5 Y  ]' ]0 O9 x2 Y6 I0 L/ f+ l5 q% P
A.MySQL
* X+ q* B: A2 o1 C8 x4 p1 X8 h. T  M  XB.IBM DB/23 p5 P; \0 B* I7 k5 C$ Y
C.PostgreSQL/ r! \' |. B( e
D.Microsoft SQL Server
3 X2 I. H5 r& ~% M* ?0 `1 iE.以上都不对
5 ~* R; }& [. C  X3 |) y; y" Q# n3 G( D! x' O* m8 j7 h

) h, Q1 M, S: r- B$ X5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
- I7 ?/ B* T( H6 m' F( S4 _4 V7 s1 z2 f# a5 `& C* h
<?php; s7 L, ~, r& }  j
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);# H& o  I, h( s$ K
?>
5 |" J+ P) E; x6 e3 i! J% [
0 v2 k& }" b3 `3 S9 M, qA.MYTABLE表中的记录超过1条: [* F! A7 |% ~: r$ l7 _
B.用户输入的数据需要经过适当的转义和过滤3 X' e0 w4 [+ Z- Z5 g5 E% C
C.调用该函数将产生一个包含了其他记录条数的记录3 y2 R- u. J; |! G" ?8 W8 ~. C
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
$ k; e' }" f9 A# n+ ~8 cE.查询语句中应该包含数据库名
9 V7 L# e. z3 G; n
& ~: D2 h" q7 {. d% B
( `- ?5 x) h+ M6.______语句能用来向已存在的表中添加新的记录。
2 x. M; c5 g% E- A2 G- Z& r
$ n, D( z/ U) R& Q$ y答案:____________. F/ A& d0 s# ^+ O- B/ v
& x* l5 M8 G' u9 _9 `$ E
# q1 q) F  O2 R# J$ @  K
7.以下哪个说法正确?4 `/ K: T, b$ @% A
* h$ s# ]$ ?, p
A.使用索引能加快插入数据的速度# ]% U6 i, B, g5 l2 `2 t' n
B.良好的索引策略有助于防止跨站攻击2 s- g6 }, X3 H: K2 l' X
C.应当根据数据库的实际应用按理设计索引3 Z1 a" t9 G- P( r& d* h# f
D.删除一条记录将导致整个表的索引被破坏
8 L+ L; k' ]& s$ M' |  e$ h2 X% qE.只有数字记录行需要索引& U( x3 N( U% K! w! u8 T
: l3 X  O3 K: m) t& x8 M
. o: B& o5 C& ]9 x# E8 T2 B
8.join能否被嵌套?+ m, q9 q% B% i( D$ m
$ C: p$ V- Y; P
A.能
' u2 C' t3 c6 J7 V! WB.不能5 g5 x$ D) {6 {: U9 C, j
7 U2 \; N. K2 G4 R

% V* C4 ^* S+ k# Y1 q9.考虑如下数据表和查询。如何添加索引能提高查询速度?
, L- N4 \+ Z1 G( ~* ?9 n  i3 R4 O0 A; ?( x" F
CREATE TABLE MYTABLE (: @% ?3 ]' D6 T3 Z* D' v
ID INT,
8 e; r, \: }. R" k8 R% g) mNAME VARCHAR (100),: V0 K9 a4 L) u5 f6 T3 V$ U
ADDRESS1 VARCHAR (100),
: G, C( i1 C& u) e, OADDRESS2 VARCHAR (100),3 G7 U; O; R) I8 r( l
ZIPCODE VARCHAR (10),
; j2 D. c0 }/ \* ACITY VARCHAR (50),! x* C" f! m4 A
PROVINCE VARCHAR (2); S" D5 [( F0 ~9 [
)) T5 d/ t) V% [; j; W) b: P) r) q
SELECT ID, VARCHAR
9 g0 s9 e7 f# C9 }/ r, w3 o; HFROM MYTABLE
2 d% F# R, m7 n& UWHERE ID BETWEEN 0 AND 100/ B' Y: X& A) R3 o( R
ORDER BY NAME, ZIPCODE
6 Y9 R; H4 f, M' z# ?& p$ x1 Y, b
A.给ID添加索引% |' _* L* i  l+ T3 V
B.给NAME和ADDRESS1添加索引
- r1 T( @/ o9 m4 v$ l( @C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
( d+ j: d6 _! U; {; a  nD.给ZIPCODE和NAME添加索引% {# l9 `5 P# j9 Z- v9 H
E.给ZIPCODE添加全文检索
* `% x& Q/ W/ D
  c/ o* I' \. N2 J  Q0 H0 D1 t# O8 N& V, r* B4 f9 H+ p. u* \& @
10.执行以下SQL语句后将发生什么?- m; {! G' `! H6 K
$ D" v7 k+ H! z7 Y$ f; |
BEGIN TRANSACTION* p6 s" y7 b3 _
DELETE FROM MYTABLE WHERE ID=1) ~$ z% E, O( K. o
DELETE FROM OTHERTABLE) s8 u! M2 K1 }* h
ROLLBACK TRANSACTION
6 K! W+ P& u+ Z7 c- B) ?
" o: x2 o" A( F6 p% bA.OTHERTABLE中的内容将被删除
0 i$ {0 x0 u) C1 l% m6 l( V5 CB.OTHERTABLE和MYTABLE中的内容都会被删除% {! Y# i$ Q* b) l+ T+ Z
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
) O4 p9 ^5 O5 t) E; G7 zD.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
1 W# u; n) N9 KE.数据库没用变化& i1 x0 F# y: ~5 W! ^

. S, A& t6 C7 V+ }4 p3 C
* t6 m2 F5 M; Z1 J6 _5 J; l11.DESC在这个查询中起什么作用?
* Q5 z: g; h0 ~3 Y" \" Q
( Y* I# N) z1 N+ ESELECT *( w3 U  f- d' t4 K: X! M; z
FROM MY_TABLE
+ ?/ T5 t7 R' `- D5 fWHERE ID > 0
+ a0 J' h8 |) ?: ?5 }! BORDER BY ID, NAME DESC" E' ^( v% t# Y: i
6 j/ Y6 n  U% F) O! y
A.返回的数据集倒序排列/ X) U- H; g. l/ f. O( }6 N6 X
B.ID相同的记录按NAME升序排列1 L5 e* J  ~9 Z& l
C.ID相同的记录按NAME倒序排列
3 J; i# b( `. q( jD.返回的记录先按NAME排序,再安ID排序* ?  A0 ?% P7 z. X5 y$ \
E.结果集中包含对NAME字段的描述& e0 u& b' a+ ^
# A  l& J( c/ t
! o- [" V8 e3 `' |4 S, o
12.以下哪个不是SQL函数?
& e. K. [1 d) D% O
! L" q% }& G8 u3 }A.AVG
- g+ F' f# I( V# y; ]B.SUM* e( J3 D5 y. m9 C
C.MIN
. W& }' G: K6 w& o1 |+ C. yD.MAX
  G( N! @4 g. Q! l% @E.CURRENT_DATE()+ [4 ]2 @( X/ ^5 ~0 j
5 q* r% T" V) ?& Q4 [
0 G$ C$ O9 o& ^. a
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?3 q. B* ?5 q5 l8 h2 U7 W$ z

" i6 S! |1 v0 z+ F4 R' W5 g) xA.该字段必须有索引5 _% P: s* C; R
B.该字段必须包括在GROUP BY条件中
- j* a2 L" g- j. O: u; y  D6 ZC.该字段必须包含一个累积值
/ L* L9 [0 |$ D9 O/ N+ {. P& uD.该字段必须是主键
% k' q# Z4 J- |( hE.该字段必须不能包含NULL值
# m+ I, b' C# y7 k- d. x5 Q: `, R+ L/ }1 A- z# ^2 b
" V4 I, M( V) k( R! K) Z
14.以下查询输出什么?
# g& B# P2 ^7 H& k
7 j/ v7 l2 n4 `9 {( O- Y6 ]- CSELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE20 \  w$ j" v' E* y- Q
ON TABLE1.ID <> TABLE2.ID
' h6 k4 z% H! o4 n: D9 {/ |+ C/ ~3 r& i& H0 }8 s
A.TABLE1和TABLE2不相同的记录
/ k  s3 S, ~- S& YB.两个表中相同的记录
! x' E/ X1 Q# Y; |C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
" Q$ B" s3 g4 M4 {8 x+ G1 [' UD.两表中不同记录的条数
  s( P0 r! b" i' X/ ], F% E# GE.数字2) y" q' K$ |. g8 h2 c
! b7 y2 J# m8 |. W
7 f+ p# d' f  o0 A% b7 @
15.______能保证一组SQL语句不受干扰的运行?7 T- Y$ s( _9 n

; F# a: d  k% N9 D4 g( }. y答案:____________& t" ~7 ^1 H4 P; N1 [
8 h; |, ?7 A$ o7 h! r0 b/ |0 e

% I, i! k& X0 o2 J+ a- b: M! B- X! {% t7 E
答案速查
& T$ v. D3 m. y1:BC: m3 ^# v/ W  k8 k# B+ U0 z
2:WHERE
" M8 e3 W& C! h/ }/ K( H& g/ U3:B* _  w: j) }( W
4:E% u2 J; M0 W8 M: R' l/ e
5:BD5 a+ Q$ K) Z) S' H* g! v
6:INSERT- J9 I9 M  G; W2 ~. B% r8 v
7:C" e8 S% z. S$ x. Z
8:A  c& l5 H. V0 v! @, q. D
9:C
, P- f  ]: ~6 W/ D. L6 |% E1 i10:E
9 K4 p' U8 d. C11:C$ a+ L( S* M  \$ L
12:E
, S9 G% b0 r! B4 G13:BC
1 f- `. y% U% P+ H  g9 R4 S9 y7 t* w2 v' l14:C
: l; b7 a' A! |9 D/ }% K15:事务: k0 p2 L" x2 V4 K  u$ j2 E
% T) H- Y& n! {9 w1 o1 n) c9 S" W
- @. t: v/ d- _, N0 N9 @! z
4 E2 I8 J6 C1 L; J4 ?+ J5 z
答案详解: v* T" u0 u$ A( R" C3 K
/ Q4 _) d6 ~' |
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
$ A% ~& {9 G0 H( k; I& |1 g
7 @# K# ?/ i6 S* D2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
) Z; p' L. o; R0 H9 R5 a
: S" I9 m2 t9 h/ }8 Y% C  S# H- A$ S3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。  j$ N3 d  x  R/ L3 ?8 {* u# B
. i/ a7 H9 ?# V1 f- \- L! t2 e( E+ e
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。* U6 E: D& Q5 t/ A5 T+ h6 C0 P
/ H; J9 |/ H7 L/ X
5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。" z: L) z* Q3 `( C- |
  B% o6 A/ _/ v, D
6.答案显然是INSERT。9 @! `/ J. p, l
$ o. @& I" p, K' c
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。' k; b; f; X, h/ z9 G

8 \# ^/ `" }3 ]( L& S8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
/ s& c8 S2 L4 Z+ ?# F# }+ l+ m5 a
! c6 l6 J! {9 w) [2 q$ K0 F$ q9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。2 n7 W$ g* r& R

* a( E  K" O5 X; D10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。& b# U6 e8 D* [; E  z, {
) ?/ `$ D2 l% o! g' ~9 O; r
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
+ t& S4 V7 x9 l& W' j1 j' n- s( i. d1 P1 u1 w9 y
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
7 _# H5 i, X3 S) @! r( O
" S# R) |1 l! S9 H$ W13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
- j$ @9 ^9 _$ e, d: F7 ^4 }
- Z, c/ I' Q1 F3 g: w8 ^, n( o14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。! u" k) G) d# _8 w4 N
% {# U  K  }7 X
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。




欢迎光临 捌玖网络工作室 (http://www.89w.org/) Powered by Discuz! 7.2