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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。- i) w3 S- t& ]8 ^9 s$ ]" x: @# T& b
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
6 |* ]" C% k& S; F% c本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。& y$ U% R7 M5 n: V4 o) J, U' u

9 b7 ]  O6 q- o; T3 }, o& t% e4 U; E* g7 X; ^% N% m0 W$ I) [' L: [
问题) f! D, E9 c- K# Q& x

% N. N- W* s6 n& W+ T, {  w& A1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)$ j: H. s& {% L+ p2 g+ g7 [: _' Y

+ I' V4 E: y" T1 k! ~  ^% x/ z, RSELECT * FROM MY_TABLE3 c9 |: M0 @9 a% c7 r

  y4 o% Z) w. K$ q6 kA.如果可能,用把查询转换成存储例程* E8 v. A. x. N0 C2 `- o! u3 q
B.如果程序允许,给查询指定返回记录的范围
6 L/ q' D" C5 IC.如果可能,添加where条件
- z: M% m$ V2 R2 G6 bD.如果DBMS允许,把查询转换成视图0 h, n1 Q' m& |6 }+ T/ x  Q8 m$ P/ \
E.如果DBMS允许,使用事先准备好的语句
! b2 H; ]9 z  e- f! w7 q8 Z8 d" f0 f7 K, K5 l: |1 a

2 e) l; F# y6 v/ l2 ?6 n2.可以用添加______条件的方式对查询返回的数据集进行过滤?9 `1 ]7 i& s$ u, f$ r2 i; w8 f# S+ w

0 c1 f$ C3 B% [答案:____________
' B# g$ _- o0 |- k# K
7 [& w7 \9 D5 b/ K, w
+ c2 M6 `8 u7 h) [* N/ v/ J3.内关联(inner join)是用来做什么的?# m1 @# ^; C- w+ j8 T* l8 _. [

# I7 k' p' c7 L8 P! s* Z& V( j$ Z8 hA.把两个表通过相同字段关联入一张持久的表中
2 {7 D! e9 r2 C. ?6 o  Q+ SB.创建基于两个表中相同相同行的结果集+ v3 W" l7 I1 M5 w
C.创建基于一个表中的记录的数据集
) p8 Y0 x: a" ED.创建一个包含两个表中相同记录和一个表中全部记录的结果集' }: D! _9 m- v, W& x
E.以上都不对
, K; b  M  [. ^4 f
! ^# S: S4 _2 ^8 k7 U1 i1 d* ?' H0 H+ z  w! L+ X% k, x
4.以下哪个DBMS没有PHP扩展库?! v, E, i+ o- P& O" v

: W8 W6 ^5 G$ w2 H& KA.MySQL( G, q$ C9 K' ~
B.IBM DB/2  _9 ?. t% `9 Q# f$ }
C.PostgreSQL
- [( R% P; K; X- A) i$ eD.Microsoft SQL Server
* k/ P: ]$ z  b3 @+ `4 GE.以上都不对" s) [  |1 x2 a

/ |* s2 i+ h4 a2 s1 U7 E% r, h+ A* q+ Q' `. r1 ]/ e) a% \' a
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)7 Q& w$ V8 Z" @8 h5 u" R- P
8 W9 r( g+ Y" ?  R9 ]) `: N  d" v
<?php
1 ?' s3 R2 R  {# f" _! @! m- J0 g$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
# T; _; x0 f4 S' e0 h?>
" H; O: f1 }, O& G
3 g9 k  a* h  o6 s( g! }A.MYTABLE表中的记录超过1条
# B& M' n! x2 [, e* I3 _B.用户输入的数据需要经过适当的转义和过滤
' J+ h! X' g9 r' y' |2 y0 mC.调用该函数将产生一个包含了其他记录条数的记录7 m; N4 F: p  I; @5 F- V  \
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
6 d; s4 F: f% ]( M+ `2 Z. KE.查询语句中应该包含数据库名0 O" Z: r7 ~0 d% D" K8 `; b+ h

, r' q) h9 B0 u! C
' c* m' P7 ?0 K! n* I6.______语句能用来向已存在的表中添加新的记录。7 q8 _0 `2 `9 V* N; J8 c7 e
8 K& o9 e" U7 n( C
答案:____________
& ^& b$ \4 k: Q6 _5 @! q+ e* J
: X* }$ t& S, P# h3 b0 q* O8 B+ x: O7 m
7.以下哪个说法正确?" f- q9 w4 D1 [' ?% ]

$ x8 x9 M; u' e9 _& XA.使用索引能加快插入数据的速度
: B6 V4 C$ w$ O% r& f: t5 @B.良好的索引策略有助于防止跨站攻击
' I$ c3 `6 R( P. ^+ \C.应当根据数据库的实际应用按理设计索引& |3 m) |1 m7 o5 v
D.删除一条记录将导致整个表的索引被破坏
4 @6 {5 i/ A( O; r6 Y3 d) RE.只有数字记录行需要索引6 @9 A7 s; J* [3 |

3 ~% G( ^3 j/ O# Y8 f7 G+ D) q" [( v
6 I5 Z% v7 p6 Q8.join能否被嵌套?
" R( _% Z+ S7 g7 y- j* D' Q( S3 F& f# l4 m
A.能2 M! \; W6 l' s- P! P. `
B.不能
# F) m! ^  K5 ?9 ~% J5 m$ ^/ }3 x' c& B
9 W$ A7 i% |2 G( g& U7 l8 F( M
9.考虑如下数据表和查询。如何添加索引能提高查询速度?3 N, p) q( O* L: n2 Y: M" k& o
! T& G; g; i8 D7 h! l7 z
CREATE TABLE MYTABLE (
. u7 F+ M# q$ R; F+ d$ U3 ^/ \+ v( uID INT,
" z- I6 o9 Z5 ^6 H, UNAME VARCHAR (100),
5 i( E, K6 I* u/ z8 }) gADDRESS1 VARCHAR (100),
6 a  T9 j8 p: @7 \ADDRESS2 VARCHAR (100),! [' w" M4 C# D$ m
ZIPCODE VARCHAR (10),9 H- R! |  [3 @
CITY VARCHAR (50),) Z, N% Y. B" ?' O( r$ W
PROVINCE VARCHAR (2)% Q! o" a' J' b
)! l. H9 A# ?5 m8 E: \6 S8 ^
SELECT ID, VARCHAR
2 O4 }. h8 K" H$ V/ X/ v7 ^0 XFROM MYTABLE
& A$ S- U$ x3 E1 g" Q0 KWHERE ID BETWEEN 0 AND 100
; W5 K: C2 x5 uORDER BY NAME, ZIPCODE
0 f1 p" u) T. y. E
% M# w% G5 G" e* H/ R2 W( ?  N; HA.给ID添加索引8 ]: p& ~  p  w
B.给NAME和ADDRESS1添加索引0 G! K2 K9 {" r% U* s  L
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
# ]+ o: w6 s; CD.给ZIPCODE和NAME添加索引( i) @9 C9 Z& ^+ L. ~8 r7 L
E.给ZIPCODE添加全文检索: L4 s7 B$ J& Z7 R* y" R1 r

3 T% Y% u' R$ n. a- V* l/ t$ a3 t2 x& d9 B* D
10.执行以下SQL语句后将发生什么?
/ U! N1 _9 I4 j8 j1 l4 }" e: s9 o+ F3 @0 u# S0 j1 C3 ^: l
BEGIN TRANSACTION
) s; |: F4 J* _" L4 M4 jDELETE FROM MYTABLE WHERE ID=1
' i5 \1 Q, u1 k5 m* I( q, s! i' D1 IDELETE FROM OTHERTABLE
$ T: c, o# j: O4 C- m) S9 ~ROLLBACK TRANSACTION
2 ^+ `0 E% `( a" |2 u2 O
2 }4 P. N# O* z; |# JA.OTHERTABLE中的内容将被删除
2 K7 }+ ~! I9 i- v) }. w) d, bB.OTHERTABLE和MYTABLE中的内容都会被删除9 u/ }8 D0 Q: w! L/ u& l
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除  L1 E' H4 c, z  ?+ L5 J/ H1 j; h
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化# R+ w  a7 S# q
E.数据库没用变化
+ d/ T0 W3 t- S, [6 q5 U- M$ P% v1 C* o

* d0 V0 ]( c& N2 b# Q11.DESC在这个查询中起什么作用?
4 n" H+ V+ H1 Z
" S1 j9 M' t' v# A7 r( ?SELECT *
$ C# Q# Y1 d6 b9 r9 A. ^FROM MY_TABLE! C# ]7 W, p% t( H  ?( R; b) Q+ b
WHERE ID > 0
5 V3 D. X7 G; r: R, e7 a- WORDER BY ID, NAME DESC5 W" J$ l* s6 w) F0 H: s5 Q) _4 S
. G, o- F  J$ z1 n, [
A.返回的数据集倒序排列* Q: ^" O7 J0 k* B5 u+ M3 R
B.ID相同的记录按NAME升序排列
4 v% T+ ^# s# @$ e* o0 R, e2 QC.ID相同的记录按NAME倒序排列; ~8 z1 ]2 B; ~1 m& O
D.返回的记录先按NAME排序,再安ID排序; ^- ]* q: K4 B6 v
E.结果集中包含对NAME字段的描述) `, E8 q1 o- J; n( v% ^

# I9 L; _5 m9 B' c9 S+ _) _- S
& p; y+ L5 f  g6 M* o9 E1 q+ ^12.以下哪个不是SQL函数?9 q, s4 V0 j0 m) \# l. j! v

" ]6 R2 v  k/ j1 w. B  X" XA.AVG
# v7 G, Q1 P2 @( K; ?, ]B.SUM
5 A) v8 ~) C6 E  a9 YC.MIN
- ^  c! u: M0 E3 D; I0 @- kD.MAX
0 V: Q* _% N4 S0 H) q: E7 QE.CURRENT_DATE()
5 L) F5 }9 p9 |% i0 I6 g, e2 i- L: w- ]

" F4 g% l6 g; r) |) r/ A$ N# G+ x13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?3 A" K3 E, y  N7 c! E) T$ o
" m$ I$ ]+ K) k$ t# ]
A.该字段必须有索引+ N% L6 }( m! \" t4 v
B.该字段必须包括在GROUP BY条件中
1 q) Y# l9 {" ~6 _9 x8 YC.该字段必须包含一个累积值
) l) N. F8 E+ I( `D.该字段必须是主键9 V6 Z/ C4 s( X: ^
E.该字段必须不能包含NULL值
7 K- r4 R3 a) a( F+ o2 h* r5 \4 ]0 K6 s
5 w% E; W' x$ j9 ~; \
14.以下查询输出什么?; ^# \% R- E6 n6 I7 Y3 W
2 B% E- A4 K0 u3 ~
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
& K3 E* S' o" o# ^  f* B2 V2 U/ bON TABLE1.ID <> TABLE2.ID! G2 m" j  ?) d: e8 g3 r% c

; B, K3 m* o5 j2 ]; V' V3 `3 w5 }A.TABLE1和TABLE2不相同的记录
4 x& u- S% v$ b2 zB.两个表中相同的记录. b3 R) ?/ u- I0 X3 J8 O
C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
. K# V6 P* E+ J% Z! `D.两表中不同记录的条数; @) y0 Z" P2 k8 [" g0 D0 x7 y8 y2 t1 F
E.数字2) N: L. z3 E2 I, D! M3 P. j6 K7 f1 Q: D
3 G* o$ p7 b$ ]; H

# ^5 R" `% ?: r1 m( Z2 I15.______能保证一组SQL语句不受干扰的运行?5 }* B9 [, F- q. k4 Y2 I& J' G
* o% g7 n* T8 o/ q& [& a
答案:____________
: `: |2 |- m( f$ V$ i5 c$ A  I& ?5 G! D' M
& v' [& J# t+ k6 R9 x- ]

* g: m) T& ?" Y答案速查" V5 ]8 E6 k( }0 j7 E/ @
1:BC+ _4 E. D* h! R  e7 _4 S
2:WHERE
' q) _* I5 I' |3:B
! b6 R) z9 i" C3 K6 j+ z& f4:E7 @) d8 r) a5 q- ]) n: D
5:BD+ s0 |& l8 L7 K' U' K$ @
6:INSERT
4 d3 x( m6 l) F9 b  T4 E7:C4 n$ J/ X6 P5 l# h; @, i* {% o' @
8:A
/ z9 d! X- h) M$ I/ Y9:C
  U4 N/ [4 p5 j1 T$ G10:E. F+ @, c, Y9 r6 m8 R1 t+ k
11:C
! {! Q* l8 s" n4 \% B3 `12:E$ _4 g4 ^7 l1 d/ U: L
13:BC' z0 F, I6 v. _) C0 I* ~: N' N; }7 f6 O
14:C' n' o6 A, l" h, U) q1 T# n
15:事务3 R5 E+ B3 c7 M" k4 h7 T# |
+ g9 X# h4 Z6 N7 x# D
; y: n9 c8 i  M- T1 m' p

) b% P& H9 L" k/ o5 A: H答案详解
  X. `+ q# t' v% t# z
! P. `* i6 s# ?" K$ n0 W1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。, S/ t- }" Q5 a0 S
! w. [- A0 h; }; H9 T
2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
7 N; K8 z6 e: C* Q/ Q- z- q4 G2 {
9 q: j9 k% a, a3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。2 J7 `' M  {( J' I9 ?, i! J

/ H7 t; p' M- W4 d$ [2 [+ `4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
. O4 i+ s6 y! i" W# z$ d6 X3 Q7 C2 N2 R6 p
5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。) M8 }/ n: _9 P. O( A
% j- ?# s7 L  a; v# X1 J& C
6.答案显然是INSERT。5 e6 a& ?' ~- R' I$ e
$ |. k6 G+ k; i  X) q
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
# c4 ^: v( R* c' C$ D' X+ G, W
& R0 }8 A9 J5 g. c8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。: g& b) ]* u' O* t

! b+ x8 g+ n& @5 O* v& n( p9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。3 k, S1 T( B3 r
& Y; [& Z6 O8 s( _3 ]4 l9 n
10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
  j% B" c8 P1 r
& z5 I- V/ G4 u/ F# x% U11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
( T6 D* _. {/ o& J, z3 t- _0 |: L6 |& s' e
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
, F+ g5 ]" V/ v7 p1 g8 j/ z
' k9 I' R' H" d/ y4 X. u% b; O3 h13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
+ ]' s+ T. b9 i" D1 `- _2 D3 L8 Y0 I
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。
  {& V( @' }8 ?( |3 I5 K& O8 r% P8 C3 t6 x9 e4 S
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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