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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
$ K% w/ }; ^5 ^  NPHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
" l6 D+ q, q1 e2 B( v2 j) [本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
, p: z8 I- ^. E! F. I. _
/ Z7 F9 H! k  O+ n1 M% W
, G6 r6 O9 q7 w' N; [问题; e! X' f0 Y+ Q7 Z9 g8 H3 R

; y8 @+ n2 T' x) D1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)/ M# c0 S3 h- r7 e" }) {

, D! X4 |  h# pSELECT * FROM MY_TABLE: @% R, E! X6 U! Y- B3 A3 U9 ]/ o
1 ?3 C; `# k! u, m1 D0 s6 U6 v
A.如果可能,用把查询转换成存储例程
: A2 x3 i# v# bB.如果程序允许,给查询指定返回记录的范围
: S% B+ }6 l' r. rC.如果可能,添加where条件( Y( |- u6 a+ c
D.如果DBMS允许,把查询转换成视图
2 i4 @; U9 R! _4 l; SE.如果DBMS允许,使用事先准备好的语句6 M; D& A% p! s3 j  q( d

, B/ m  x1 ?2 p" R
, g: g$ e4 M% `" q# W$ f8 Y2.可以用添加______条件的方式对查询返回的数据集进行过滤?
, h- I; r0 ?8 g. f3 I- s8 R4 b% ^) R  t+ l, Z+ U
答案:____________
" I9 |  ?" ^0 L, d; q$ A
1 m7 N( b  J& b/ U! w  {3 {* n/ j$ B+ G: ?4 l, W  `
3.内关联(inner join)是用来做什么的?
: G: J+ h3 c; x5 E% {0 b* G6 X1 |0 m" Q) }' [2 E/ A9 \3 o$ u
A.把两个表通过相同字段关联入一张持久的表中
4 Y; e  A7 `, x7 w' oB.创建基于两个表中相同相同行的结果集  L4 b3 m" X3 n2 O" r$ k( ]9 Q
C.创建基于一个表中的记录的数据集" z- N0 i6 w5 J) ^2 O
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集
$ \+ K: T* R( N- ?" ~E.以上都不对
% \$ u0 C. @1 e' _9 e
) L1 k5 y) N) h& F: N8 P
4 I& d- ]/ o5 B5 w) |" L4.以下哪个DBMS没有PHP扩展库?" X& W  X  u/ l0 P, B3 B
! Q) m* }" f3 U4 I6 L5 b
A.MySQL- M# F( y# r6 m* p% _8 s% p
B.IBM DB/2' n+ d  J! [& g- u+ H* N/ g
C.PostgreSQL8 E' t( P$ H& B! F; c  C2 [; G
D.Microsoft SQL Server5 H* Z3 T0 T0 ^& W/ K3 u
E.以上都不对
; }0 F, w5 l0 q
& {$ d9 m! ]  d6 j3 ?* Q( K
! R( [! v+ {: {7 j5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选); i$ ~0 Q4 e: V' u0 u) A* b7 p0 x
3 S) @7 |' u* B; ]/ o3 C1 _
<?php
/ f! B4 O! \# x: k4 n7 N( g$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);* H% W9 O0 y5 B2 a/ w
?>" Q1 H  l3 @0 ^4 b1 [
; v) H3 y1 ~1 n- b( B
A.MYTABLE表中的记录超过1条) m2 B9 y* T. U: w5 {
B.用户输入的数据需要经过适当的转义和过滤
4 k$ a+ H) Y8 ?( ^C.调用该函数将产生一个包含了其他记录条数的记录
. U8 D8 [! l7 ?2 V! |7 O3 I' H6 f" bD.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
* A& q7 N+ ~( D( Y, Q- }% ~" Y; R. \E.查询语句中应该包含数据库名
; q1 u4 a1 Y7 z8 p4 w
( f& }. z2 J7 v# D/ x" G' f) d, J3 ?, h6 O2 g+ }  F- D8 Y
6.______语句能用来向已存在的表中添加新的记录。' x3 r% ]. ]+ V1 s9 U  w

' t4 R8 p- `$ m: H1 \9 Y答案:____________
1 K0 h8 ]. D4 \6 C% A) u& l: p# R. |) k: I9 D& j( h

' _& |# {& d# \" v+ k% d- N& u7.以下哪个说法正确?
) ?! n1 z1 O  Q: Y5 n/ k
8 s' w1 f: u- Y3 K" QA.使用索引能加快插入数据的速度
  R9 g$ B/ f9 D2 o" u" Q6 F# DB.良好的索引策略有助于防止跨站攻击
. ]2 ?, I2 P! gC.应当根据数据库的实际应用按理设计索引
+ d. x- p' a7 _2 j# Y+ PD.删除一条记录将导致整个表的索引被破坏7 [/ c# d* D9 H' N" s
E.只有数字记录行需要索引2 j% n& T0 U: `1 Z# X

4 }/ J! v6 n9 z7 `# g
% n! `$ l  x2 a8.join能否被嵌套?
/ N5 n! ~% ^3 R0 i, `
* c: L4 Y- s% J. N* s* t+ N9 NA.能
' ?2 [3 c4 g% D6 ^! s" f% cB.不能' O* b  @9 t9 }  `8 \" g
% m( x, V; t+ B  ~- j' m

; J, ^9 ~5 }! [0 W4 L9.考虑如下数据表和查询。如何添加索引能提高查询速度?4 }6 I6 _5 ]8 R* m" X- e

' }* ~- f* a" |( OCREATE TABLE MYTABLE (
* w  i5 H) v' e3 i6 g  i) s+ \ID INT,* w5 r- q: y* A
NAME VARCHAR (100)," R" k: j1 Y' c. A( H
ADDRESS1 VARCHAR (100),
4 \4 H/ w: p, z9 H1 ?" n9 lADDRESS2 VARCHAR (100),6 N, m; d9 I* @0 H' X: }
ZIPCODE VARCHAR (10),( m# Y) s" J" A& K1 R; i, }, `
CITY VARCHAR (50),& V1 g6 U- Q9 `& m7 Q9 Q6 d3 Z9 \8 [
PROVINCE VARCHAR (2)7 h  f  G! H; z) r+ p; _+ a' I
)
; Y/ I; S$ R9 U$ ^7 vSELECT ID, VARCHAR
' [; |; i5 p% N; v6 f3 b( \" ]FROM MYTABLE
. w/ X9 [& u7 w  ?/ sWHERE ID BETWEEN 0 AND 100, x, |$ X5 V" n1 L
ORDER BY NAME, ZIPCODE
7 y; c" n. A4 t5 g" x3 u1 u( F8 U" X
A.给ID添加索引) Y+ x7 v+ i6 O9 H& |
B.给NAME和ADDRESS1添加索引/ \( e0 W) {7 f) O9 i) i& t9 I9 x0 l
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引. P' u( J2 \7 M/ u8 C
D.给ZIPCODE和NAME添加索引9 L& g( K( H9 P  N
E.给ZIPCODE添加全文检索
$ f4 D, ~3 C0 E( a6 c6 |4 p4 H8 K% j7 y4 g- Z1 V2 t" e+ b2 r' v( l

( B3 J" e$ y  R7 Y3 v, W10.执行以下SQL语句后将发生什么?8 ?4 h0 P( x; v6 p+ W
0 I1 r9 |# d7 y! X( m
BEGIN TRANSACTION& }5 Y% Y: V! M' b# r# i. L
DELETE FROM MYTABLE WHERE ID=1( d6 M* z) w; `& U
DELETE FROM OTHERTABLE" U' I- p$ \% ?' H4 F4 m4 Q  ?
ROLLBACK TRANSACTION3 M* m. e& E" E

( v0 m% W' |( `; v$ P/ f1 xA.OTHERTABLE中的内容将被删除
1 @# q2 H0 f3 }8 T* _' UB.OTHERTABLE和MYTABLE中的内容都会被删除
" b5 q% e0 {/ [! N5 r' M4 ]C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
7 v+ H& T& X9 X8 gD.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
2 z, u& X" v3 s- q) [: ?E.数据库没用变化6 V! W) A3 ~4 B# j0 r
8 v3 F. e6 A+ o& d6 x7 D
' V' ?9 l5 u' B$ {2 g+ S
11.DESC在这个查询中起什么作用?- \/ V; r9 u) ^% \! m6 ~

' C5 f& x; x& ^* x9 m# K( }% B9 vSELECT *
$ W& }0 i5 O! {FROM MY_TABLE
+ m7 D3 G2 Q- `4 \2 W5 J! [WHERE ID > 09 ?4 ?' T5 u; G% X
ORDER BY ID, NAME DESC+ S+ I1 z! h' `0 e9 h0 ?

3 S, Y% N/ P: U( C' Z! T  DA.返回的数据集倒序排列' V, Y0 R5 O  o3 t0 {
B.ID相同的记录按NAME升序排列& q' d# p" X/ O; t
C.ID相同的记录按NAME倒序排列
  [! I. B' O+ n' yD.返回的记录先按NAME排序,再安ID排序+ Z: ?1 f; K. k8 y# [$ e  Y1 h: F
E.结果集中包含对NAME字段的描述
' Z' Q& l$ E( x7 {  E9 }+ K2 \( f. ?  e( S! r$ D+ v

1 p- w$ Q2 |6 i9 P  R12.以下哪个不是SQL函数?
' _0 L) q" t2 P! K$ Y
) p& z# u* z" |& @, k  }1 EA.AVG
( \. d5 U, s6 C, G& o0 [( @, q( @B.SUM
4 ^0 W, `3 R/ s, ^6 M$ U  j+ q0 vC.MIN
: r# V$ g9 N) s, _+ p& w; |; J' {' `D.MAX
. V5 W1 ]1 u. ^E.CURRENT_DATE()
& j9 O0 h7 I1 a# J0 ?+ D
1 v6 G1 ]$ d- |# b1 N5 r7 P" r+ Y5 ]
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?# m' d. o, P2 v
7 s+ k% d. q2 I" U# O3 n- G+ b+ V
A.该字段必须有索引
2 ~; a6 E' u4 `  g! O2 tB.该字段必须包括在GROUP BY条件中
7 b% D: ^% U1 P$ C; E' P8 q6 u" aC.该字段必须包含一个累积值
0 B& O2 v9 C6 q. p# m2 cD.该字段必须是主键) k; R: M+ i) e% K( R
E.该字段必须不能包含NULL值+ u- l" v( \, |8 \8 Y4 X) J

5 Y% T9 y4 Q6 J) k3 e9 z5 W* u& Q* ?  n0 X  d* Z! ~
14.以下查询输出什么?" n9 M/ x3 R% z! E! n  _
4 C6 ~8 }+ L  \! c6 @, \
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
( M" _) u( v0 I: j) YON TABLE1.ID <> TABLE2.ID3 @3 `. z, [- F' R: n/ E

! F2 I5 m2 J+ B( F8 R* H; _A.TABLE1和TABLE2不相同的记录
: N6 t; W4 x/ AB.两个表中相同的记录
3 k4 G% t& @8 D" q8 oC.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
0 s* {6 v7 z) B% _4 w0 `' Q5 wD.两表中不同记录的条数/ O. N0 F9 a& u: A( X2 j$ o
E.数字2# w' |- C* u5 H' ^& W1 k3 w% a

( ~3 k$ m, o9 _# N0 }/ |4 j  b5 h7 _* C) t/ z
15.______能保证一组SQL语句不受干扰的运行?9 i1 A) P8 W' B6 Z( ~
; I; F4 S9 G( K7 P- e7 Z3 t9 C
答案:____________4 `: P/ [4 g: [0 X* F# V$ j# |" m4 G

6 ~: u; E; P7 s3 p
7 u$ x1 o5 c) v% ?! [7 k: c) k! ?/ D) _! T! x9 F. m
答案速查* L2 Z& O% i: h" x7 X% ?- Z
1:BC. v9 X8 t; _# h/ L  n4 \! M
2:WHERE( _6 g% I6 v$ a8 L: H
3:B1 A0 h2 b, `8 }7 S
4:E; Q' [; }- ?! ^2 E# j) ]
5:BD
( X6 v5 Q1 P% V- t4 N) k2 W* @6:INSERT' X: A, V8 `" @7 e
7:C7 [! ?9 l: a( F; V4 d
8:A
6 O! v& D  m' @/ H" T; [) k' z. B9:C6 K/ P" Y! U) Z
10:E' ^. x6 ?0 `/ X7 B5 Y, z
11:C6 e  R! l% a; h. o1 |6 i# r4 Z
12:E
0 \5 l8 E( @- n& n# p8 m13:BC
0 _. q% m+ q  }7 K14:C
2 |! @1 T6 ]% i( V15:事务
1 V4 k7 C7 x& ~& U$ H1 y
# m6 ~: v' D3 o% x4 E0 F' b; N4 K! t4 s" T% H* O

% E/ B- X9 H5 x" u9 h答案详解0 O' j, Q% c$ i  e3 o& W

4 m3 u5 W7 O  {1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
1 Q; f8 E+ `3 T- V% u4 S& r9 o
$ o5 F, L3 `- |2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
; ?" J. u0 f. B9 F# V7 y  W9 |+ L& v3 p$ \* m' C8 I
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。
3 y7 O) r4 H8 @6 P3 v( ]
  S; t" [9 @% {) D% o; v5 X6 U4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。0 `2 r' C  L* h+ S( l

- e3 A" g+ R3 d5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。; c4 l7 a) K; q- i9 s0 p$ P: @

2 l4 `& m, A. h4 i3 E6.答案显然是INSERT。
  p6 t9 D. n, e- ?
8 Z! i) T! t5 q4 k' y% L" }8 V6 V9 ]  @7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
1 V1 I; n7 _" T6 q  S7 K/ G9 ^) a' o
  C  e! T/ B2 w, _8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
0 r5 k3 q6 @- G5 m5 [: k- G) k4 A* Y/ V' Q  F
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
# U) W4 r* a# A8 j. Q9 P  e6 D9 w" W: ]1 d* J1 G- S2 F
10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。; Y5 S) ^( Z( ?: d4 J+ G( j

9 ?0 G0 [, R6 J( f0 q1 @+ y11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
# Q- C1 R, Z5 }! ^$ u+ d4 R& G7 O! H) }- i
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。; P$ z/ a- W4 z2 t

  A5 y; v, H1 Z, W* N4 X* v  _13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。% s; q/ ?, v  w; N- B; v. Z
* g& D1 W+ R1 W4 D* I# u2 E
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。7 r3 r, n. R: B! u. A" S) @
4 s9 V9 [2 Z" _  G: |3 Z7 T
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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