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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
% |8 e3 n+ K6 H: kPHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
- ~6 {6 d& z# }  O本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。/ ]8 ^& [6 V5 A, u5 P, I
; J  G1 H% c" f) o& d7 ~
, t5 b, I1 e' o7 {- C) E- z
问题+ u6 e9 m1 D! a; x5 L! h

0 E" \' s' a, y- c. E* N9 f1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)& z/ X( u% z- }* Y7 _1 e

0 V) i* u' t/ R! {SELECT * FROM MY_TABLE
* n0 ]: w5 P2 a9 z7 C+ H. v6 G, l! A5 C0 @
A.如果可能,用把查询转换成存储例程
6 E& v7 v& U6 LB.如果程序允许,给查询指定返回记录的范围2 ^" K* h" J; _6 H
C.如果可能,添加where条件
/ `9 o8 R3 H) g  C6 |D.如果DBMS允许,把查询转换成视图$ l! `9 U& W4 B1 c
E.如果DBMS允许,使用事先准备好的语句* R* Y9 i4 E0 O% }4 q

3 `! l8 E6 b+ l/ J2 B9 J, {5 c5 e
  `! d, D# ^5 U- n& ^2.可以用添加______条件的方式对查询返回的数据集进行过滤?( ^9 U* s- m9 p- y% v6 a

" t8 b( U# V" T4 z答案:____________
! o1 m( j: ^5 F  j$ ?+ m2 f0 h) H0 b2 ~) o' I3 Y. y

7 s* m# x# j* _, i3 s+ u# D0 Q3.内关联(inner join)是用来做什么的?, N" n* Y2 ?! N' k
7 r& f* H& b1 V6 u6 d0 h7 H/ V
A.把两个表通过相同字段关联入一张持久的表中
; w7 y; n4 \/ M: n* J5 b' yB.创建基于两个表中相同相同行的结果集
! m3 ?5 t8 U8 e$ Z" L/ k4 mC.创建基于一个表中的记录的数据集4 i% r8 Q. a- [& O" M% O$ V1 f
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集
/ O, E  u5 ?; L! W2 ^E.以上都不对, C0 Q7 M  T, O) Z7 z7 l/ a

  U( G& H$ j0 m0 s$ `4 n
3 x2 ?/ S8 u1 Q* F0 @4.以下哪个DBMS没有PHP扩展库?2 a7 C7 n* W, R5 s! T- B* y0 F9 n

) G5 ?/ `% k7 S$ iA.MySQL
6 H0 x. [7 [* ]* w* a: z9 A( kB.IBM DB/21 r, C5 X5 i- Z- F8 A$ Q1 g
C.PostgreSQL; W) _7 O3 l, R7 g3 a7 K5 t+ h
D.Microsoft SQL Server
& a4 f8 C- l' W: v" K; x  F1 CE.以上都不对" C1 B, q3 I/ p9 l; J* {1 Y  @
' ~; M3 ]3 J, A( c8 S
' ?% e& k: B+ c$ o- k: E
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
/ g& y0 H# K+ I3 E6 L$ g  {5 _9 Y% x) B. Q; ]
<?php1 k% s1 C% [2 \
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
" P7 @1 n" l. |& T7 j& W# L?>
8 U+ |; `% A6 |/ }5 z9 }& [4 I
, A" d# G( T/ I+ x$ oA.MYTABLE表中的记录超过1条
5 r, ^/ y& n1 \& w* C# EB.用户输入的数据需要经过适当的转义和过滤5 c) i7 `8 |* U( }5 M' {
C.调用该函数将产生一个包含了其他记录条数的记录; Z6 R0 h1 e  l) n3 U
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
0 A- K+ E, h8 X. C0 J/ KE.查询语句中应该包含数据库名* g9 x  I9 `6 r7 B) [

2 }8 L1 n4 S2 l1 m" g; ]1 @6 F( ?
6.______语句能用来向已存在的表中添加新的记录。
' I' R* X0 C. h: O% Q! Z
( d* i. e  D; B7 {, p) y) |答案:____________
( A6 F0 ^& v( ^. X9 P- e1 y4 U3 @
! a% t: E/ O4 o' A1 m3 A* _/ o5 T1 J2 C4 y
7.以下哪个说法正确?: k5 f8 G$ j; ^7 E* \
; A0 j% r! x9 B$ X& O4 t* D; y+ Y
A.使用索引能加快插入数据的速度
* d/ L/ S9 D2 y7 z3 _; LB.良好的索引策略有助于防止跨站攻击+ t1 y8 a: h/ k; c- M
C.应当根据数据库的实际应用按理设计索引
  p5 Y% J* D& Z, R4 S' ], g6 P0 o" xD.删除一条记录将导致整个表的索引被破坏
  U& D; k4 d* i  mE.只有数字记录行需要索引1 f; T9 E% q" {8 v1 j
$ F0 X- `; k; W1 Y

+ ]+ W+ {5 h3 m8.join能否被嵌套?
# Q$ g0 V" N# ]' R! v& ^5 }& {6 @" w  s/ M
A.能) Y- t4 l+ _$ T5 N' x2 ?
B.不能
/ g8 ^# y% f7 ], M4 J# f) }9 d2 F" W; \9 q7 a
! ~' z2 l7 z( h% i9 K
9.考虑如下数据表和查询。如何添加索引能提高查询速度?0 B7 V  G: ?3 W4 O" l# o- @! O" |

% c- c+ ?: l: \2 ~( j8 }  o4 [CREATE TABLE MYTABLE (6 W" c- d" y- O2 m6 k
ID INT,
: A) F$ Z* C: |: `7 F: T. T0 \NAME VARCHAR (100),
' n' V5 X4 ?% F$ l( FADDRESS1 VARCHAR (100),
( ]4 e3 H2 `9 b# @1 VADDRESS2 VARCHAR (100),. m! y) n) }6 b
ZIPCODE VARCHAR (10),
) x7 {* a* L1 _CITY VARCHAR (50),
/ |( P' v3 j8 S+ E5 M  vPROVINCE VARCHAR (2)" M8 w7 v; X; O7 W" L
)
3 E, ^& u/ e# m( A6 V" e- zSELECT ID, VARCHAR
9 b% |2 w$ Y/ u3 m5 M! OFROM MYTABLE( X7 `0 ]% z; H0 C0 S# x
WHERE ID BETWEEN 0 AND 1002 M* @4 T4 r4 Q* b# S' \" N1 p( Y
ORDER BY NAME, ZIPCODE0 N! E1 Y. p* C" M2 w

! U  m3 g1 q3 \, Y5 l3 v4 HA.给ID添加索引
$ @& v, i8 A# |# L, sB.给NAME和ADDRESS1添加索引
! a& H( ]. T" q8 V9 \C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引* b9 B/ I1 R. U4 }/ ~- ]/ h' l
D.给ZIPCODE和NAME添加索引
: A' n# H" v: [5 uE.给ZIPCODE添加全文检索
1 H, L. y+ y8 S& B8 T/ V  t# k- O' a" [
7 q8 T% [0 `# R* y
10.执行以下SQL语句后将发生什么?  j3 I0 t5 @. n- f1 e

# o& ~7 r# E$ ^  F/ n" yBEGIN TRANSACTION
$ R% }6 y$ t( h4 a+ g  GDELETE FROM MYTABLE WHERE ID=1
  o: K1 E+ z0 v: B* ]DELETE FROM OTHERTABLE
; e% V& N: k  e7 @$ w7 }4 [5 |0 a" iROLLBACK TRANSACTION
' J# y' D% }3 w2 ]
: N# b" u  k/ o; qA.OTHERTABLE中的内容将被删除" E7 X' l* S$ J1 f& j( a: a
B.OTHERTABLE和MYTABLE中的内容都会被删除8 F( X3 Y9 ?/ a& j0 P; o9 d
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除* [, d% |9 C( \3 I; I
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
  v( j! U. @3 r& k  U1 T+ kE.数据库没用变化
  x  ]; O. L$ q7 V
& A* {. m2 s" V3 C+ g; z: L- ]3 I2 ~* r
11.DESC在这个查询中起什么作用?2 k8 H0 J& A, `2 i) h/ B

7 v5 P3 \3 e9 v3 Z5 U# F6 ^9 o* N1 P2 gSELECT *
; y. K/ ^+ d' ^) t! J; nFROM MY_TABLE
' x6 {5 s( `+ e4 g, dWHERE ID > 0
8 E$ d% B5 Z& b. H! QORDER BY ID, NAME DESC! |0 m% K4 R* v  I( k; p

$ @& z8 A1 F4 j2 H& W" l" kA.返回的数据集倒序排列
8 I8 e) Q  `% J" GB.ID相同的记录按NAME升序排列
0 b8 Q$ H/ g2 [0 U: O3 _$ PC.ID相同的记录按NAME倒序排列
+ A% A% _4 G9 g: ^) ^- yD.返回的记录先按NAME排序,再安ID排序
! f3 h9 m3 j* X+ cE.结果集中包含对NAME字段的描述
3 O; A( l1 I& h4 B& d& N1 K9 B! h+ X, D% P1 T

9 v) i. W! _+ L. n1 H12.以下哪个不是SQL函数?/ q! ^8 {* P" I7 r& }
3 Y7 c/ \* K+ F- |: N" b$ L
A.AVG; [; b8 A4 b& G# ~
B.SUM
0 T. e  s% |" \/ b  r$ UC.MIN
) |3 j) i$ J: J2 C/ L! q- x! rD.MAX
! s9 z. H4 L8 \9 ]E.CURRENT_DATE()
' _* G! e# B3 I4 y
" t$ }* k1 A5 w3 s9 P5 Q- l! [7 t9 l& k7 c) r0 t
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
9 h! B) y* B# F8 e/ w
; h* W0 P8 E3 A" m1 d7 z* WA.该字段必须有索引
* O( L: Q4 [( ~  hB.该字段必须包括在GROUP BY条件中
4 ^4 y& n" R/ M' y% {C.该字段必须包含一个累积值/ C- A- S. [  K2 E# w/ S
D.该字段必须是主键
) R+ `: E& c; O8 z% p: v  w- |E.该字段必须不能包含NULL值
8 E* ]; m" b) ?, l0 K* S0 y
+ R. ]8 d* I* s9 S/ ~( p  O' t
- z( A- T6 a/ w. N& C' [1 D14.以下查询输出什么?# ^0 [- T! n6 S) d
" [1 ]! A8 t' L$ G) d+ R; l
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
1 G3 F, n6 Y" ~2 c2 gON TABLE1.ID <> TABLE2.ID) Z/ [; r0 e7 a9 z7 D

+ ^+ C+ o9 [9 c5 c9 vA.TABLE1和TABLE2不相同的记录
4 B+ s) U) R) t+ e/ [. s4 eB.两个表中相同的记录
$ r0 \- F" z! [* n5 x( y( \C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数, g4 f1 T' |# b) s% s; L
D.两表中不同记录的条数
2 c8 X* L+ W, S+ T) M1 A; WE.数字24 q) ^! N' Z* z

2 `! G6 ]% ?$ }! h- W, g
( M/ w4 J3 J9 K! M15.______能保证一组SQL语句不受干扰的运行?2 ]  @) @, w. _$ i, x) e& t2 t

) G8 _8 \7 o; u$ }! t答案:____________
. l1 k" ]9 X7 o! r* b) a5 H2 ^
% L' V/ Z- [; B! a1 r1 b" t, W0 ?1 h
/ L# E9 Z2 h) z4 l( G, t' M- p+ i
答案速查% m. u7 c1 M( d3 _
1:BC
5 w6 m& y& \+ c% t. Y; O2:WHERE
4 p$ |8 J3 X# N! B1 ]3:B/ V: v6 z+ R& }
4:E* s0 H" j. n3 H# v! B% m; n! I
5:BD% F9 M- |, t: C% r- @7 h' Z
6:INSERT2 G8 D" ^# {( C" R
7:C; E0 n8 n% _& w" l7 U3 e
8:A- ~3 a+ Y: K8 v# h7 \4 N1 y9 C
9:C. Q  N3 k; ?& }6 p. E0 B  I4 a
10:E
9 x- `; B& N9 B0 D11:C/ M" I1 `" o) u5 Y
12:E
2 J0 z7 z4 U9 G) L" A13:BC9 p3 e" d8 N2 l4 A+ H
14:C) \: D3 p1 g' W9 @2 c0 Z
15:事务
% \/ E4 t+ Z# M' P1 A- W8 |+ E
# Z& D, C; L$ R* l* G- r& l
2 _) u7 \2 N8 a; t" A
% ~) t) L; `+ b! L5 C" C答案详解0 L  m; Z1 o0 ~: u- J
' M! r4 H* T7 B3 x) x
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。3 }* X% y& y9 c/ V, X# P

0 r+ u( j8 M# [% M" ~- X/ @2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
* s7 u( H& g, S( n3 p! c( A% H, M# A% }! E9 x
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。
/ C7 m7 D: y3 n& a2 }: {. s2 ]% o9 E9 W& K- [% `! x
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
. ]2 J3 L$ z7 L. U3 r, Y9 s
6 G, R% G5 @: M5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。  U3 R) i5 a5 R' M: w, \
5 N  _: Z' d( \. r! B
6.答案显然是INSERT。- O: R4 r0 s/ Q! y: k0 T7 e: r
7 E& P* i  G( R9 W+ D
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
& {4 O2 n7 g+ T6 z8 L
& O8 M/ d! }6 x8 \  _2 E5 R8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
! G: |/ @; r% T, H* O$ l
1 m$ B2 \4 u6 Y, n+ t: \4 n9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
* s4 |# Z6 ?2 Z/ U( p% h# ]2 q4 |
. p( R( `3 N# ~* H/ F5 k# b, G2 G9 x10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。# F* `9 |! B5 m* h: x
- \+ P; z7 C& M0 \
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
1 h  E  A9 [( Y9 m! c+ ^3 ?
0 o' C$ z- i$ a9 f8 ?1 y12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。" l- j$ Q  _. B+ v2 Y) a
- }4 L  z. b0 G1 |3 V  J$ J- g
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
9 T! j8 @7 a+ }5 d8 c2 Y" q
7 U5 P+ G8 {9 u& U/ i14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。
" P3 u% x, s( t4 K0 k* O
6 C, F; i/ E+ L1 x15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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