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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
8 x' S7 u+ P6 I# f3 b, |PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。* z: e$ V9 T( i1 q, H0 N# a- Y
本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。1 A2 w) w1 D* c0 E
( a: w0 F5 `+ F- U* i0 R

; s8 H" X5 b5 }6 O$ L问题, r* A4 N6 m; ^4 E& q9 t5 H

% `, ~2 B% O0 c9 N5 T8 k1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)2 `" `3 ?5 p( O* i% \1 \4 @
# `/ E5 e; O! t2 H) c! @$ x% q
SELECT * FROM MY_TABLE
* k) j# |% s8 G9 D+ _
+ m5 l  a. i& f2 H  `% d1 kA.如果可能,用把查询转换成存储例程
" _5 c# D  s% y# T5 BB.如果程序允许,给查询指定返回记录的范围
* N" j$ |0 Y- r- n, a- i# KC.如果可能,添加where条件% G+ y5 f: K/ o  ]* K+ b
D.如果DBMS允许,把查询转换成视图
1 n8 D2 U# z7 N& xE.如果DBMS允许,使用事先准备好的语句" c; A7 ?" u2 `) \: Q) f

* E& L+ x0 r0 u) K, V
& ]+ R- Z2 H3 }% N/ m$ W2.可以用添加______条件的方式对查询返回的数据集进行过滤?; I; X% R- D+ |
% l% e3 @* g" ]; I$ t$ N
答案:____________' v* [" T. u- B( m9 V- B2 V! ^
  E1 Y; w/ g, n8 e
, x; Z# `* s; z
3.内关联(inner join)是用来做什么的?
: F/ U1 F) R" ^% b! F$ |
- j( v  t+ @6 IA.把两个表通过相同字段关联入一张持久的表中* h4 T% `' H: r/ p! H
B.创建基于两个表中相同相同行的结果集) m' ]1 K0 o0 A9 t5 c8 C! ]1 _
C.创建基于一个表中的记录的数据集1 N7 s% [: @5 _. D
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集
) `' L2 I9 c+ {7 WE.以上都不对, ~. V/ _! n7 O' h# M" ^$ y- H1 b
+ }6 y3 Y3 J  K/ f

# }7 [7 a4 ~  }- W* F4.以下哪个DBMS没有PHP扩展库?
  H  D( K, s! b* j# Y* r* Q9 I  D$ ^
A.MySQL8 [+ B+ t+ n- A  P% ]
B.IBM DB/2
: ^( b& q; `4 |8 W3 [: ?8 ]C.PostgreSQL( ~* A5 x. W) N2 q
D.Microsoft SQL Server
" P' x& G* t5 R( UE.以上都不对
- |/ T: ]6 E8 T% _/ {( }6 Z' R- t
! p, H  h3 k2 X  u$ b/ \- v* x& }. B, j/ B  {- \
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选); a" C+ H1 _  @) e7 O: i6 ^
5 |7 r0 K% e  Q! g  p" {
<?php  e: x7 A) y/ ?! a7 o  V9 `& C, T
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
/ S( S$ d% ]# l9 _?>
, O) ], h( K* q8 s
% K6 k6 h" B* m2 k, t5 EA.MYTABLE表中的记录超过1条
' B5 ?; m6 F8 `. W$ ]' J+ t, `9 k; J- VB.用户输入的数据需要经过适当的转义和过滤
: G" T8 ?2 k6 n( D' T2 GC.调用该函数将产生一个包含了其他记录条数的记录
' |9 F) K3 W  Z5 c* k$ j5 PD.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
0 H4 R. c9 [3 HE.查询语句中应该包含数据库名
6 }/ q6 O( r& }6 k; M6 T) r/ g6 N# B+ `% N. H
) m- w' l! ]; W3 S; T* v1 C+ ]% h
6.______语句能用来向已存在的表中添加新的记录。$ {$ _7 |) E) P1 H( R1 V# Y( r
" f4 P6 c% `* k& b, Z; u
答案:____________5 P4 l4 J+ |$ [3 |, N; c
& s# c7 e: j. Y8 b! L
: `  I' l' n0 u  U2 C
7.以下哪个说法正确?# I6 U+ Y" ~2 T3 _3 ~0 T- p

. [5 c; A5 v7 @  F* W" V) `" @A.使用索引能加快插入数据的速度6 |7 U! F9 m7 I! [' {
B.良好的索引策略有助于防止跨站攻击9 O; V# V$ [/ ~6 Y+ d$ ^7 `- y
C.应当根据数据库的实际应用按理设计索引
6 @$ X/ L+ J/ v6 {' C3 B0 K2 cD.删除一条记录将导致整个表的索引被破坏
2 G6 _  k; s+ C& |. FE.只有数字记录行需要索引
9 w5 ]% I/ I4 v, N
) A* j/ }8 `+ c; u( z/ ]5 z9 w: w5 h* T. A) l1 X+ h1 h  h
8.join能否被嵌套?( d6 J0 X3 g% T3 c" S8 D
! \! W0 L4 V- X
A.能  ^3 Y. \( V* G. g) {' L
B.不能2 k4 z$ Q% z! e( a. c- g  H3 l
0 n$ I& m0 n9 c# q/ Y

2 H# T, E% o* ^7 V/ C, h9.考虑如下数据表和查询。如何添加索引能提高查询速度?( |: N& C6 ?8 j# d: ~1 X
$ m# {6 J) p1 `* j
CREATE TABLE MYTABLE (+ s# D- N/ N' ~5 u
ID INT,( |( n3 F$ J9 u. j' p
NAME VARCHAR (100),* p: ~+ E6 E% u  H4 a
ADDRESS1 VARCHAR (100),4 H  l; R" b  G& R, ^1 A: i
ADDRESS2 VARCHAR (100),
' Z0 O% H7 N/ A' xZIPCODE VARCHAR (10),7 b/ {5 H! \  s5 M" L, m; M# B  ?3 s. Y
CITY VARCHAR (50),
: }# h4 a/ s; s; rPROVINCE VARCHAR (2)
/ s/ i  g5 r0 H. d6 ^$ L' Y  I" ])
5 F: |' Q2 f6 M, Q' w, uSELECT ID, VARCHAR' T# D: |! a6 q! l, W" f+ H2 |8 K1 Y
FROM MYTABLE
9 L* U3 _! @+ w5 X& jWHERE ID BETWEEN 0 AND 1001 p* L) N, R. N! ?4 L' n
ORDER BY NAME, ZIPCODE
0 d( {9 v  X2 M0 o* a! v
7 j5 m8 A4 i+ [' v" `0 C/ @A.给ID添加索引+ w3 s2 t( U8 k( V
B.给NAME和ADDRESS1添加索引
) a7 `; W+ N# f& m9 oC.给ID添加索引,然后给NAME和ZIPCODE分别添加索引9 p/ L- X, i$ R! @; s/ x
D.给ZIPCODE和NAME添加索引$ [# t9 x2 U1 w( r* I+ W0 p3 y4 f
E.给ZIPCODE添加全文检索
- A/ T4 W& d4 Y, J: ]% V( v
- z( p$ j1 H% f2 m: e, f0 F$ l. n5 g" [0 a& k9 J- Y# o6 }) N& r) p) d1 l
10.执行以下SQL语句后将发生什么?
4 o1 P, n) Q! m+ Q6 a
. ~& P6 U5 F, G( l, A# |5 wBEGIN TRANSACTION' X$ P6 I  {$ ^# l
DELETE FROM MYTABLE WHERE ID=1! q+ |. a3 i3 P2 i
DELETE FROM OTHERTABLE
' y( I% i$ i  v3 y' ]ROLLBACK TRANSACTION) x% B% {7 J( U- m# e: v( h$ U
2 {0 g0 O. k7 E% ?+ {
A.OTHERTABLE中的内容将被删除
) c) N& F2 X2 e( m  Z) N9 QB.OTHERTABLE和MYTABLE中的内容都会被删除
5 M" V" d; q/ O! O& i4 S' zC.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
6 d. ?+ }! k- W+ l' n: c4 v* JD.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
' F: M+ _/ w7 s7 N- nE.数据库没用变化
) x9 n' s: \9 D  e1 g
7 F, l5 A& z* h) v7 ?4 E
7 _5 M, E* j5 ~0 {11.DESC在这个查询中起什么作用?+ w0 S5 U0 a: g( K2 b. S+ E

* Q6 L- l0 X; gSELECT *. F' M. N7 a; N8 I
FROM MY_TABLE0 w$ E2 n. o$ J, p
WHERE ID > 0
. h1 u2 X/ x7 I4 {8 E( A" yORDER BY ID, NAME DESC) x) F; q) g  @5 B
4 j/ S3 Y3 Z4 S0 Q0 m* n/ n
A.返回的数据集倒序排列
+ Y# D' W; ?' I  q# yB.ID相同的记录按NAME升序排列  {! F9 K+ t7 R+ |" t0 J2 z' X9 \
C.ID相同的记录按NAME倒序排列
' V2 W# Q! W' `! [$ j, i' ED.返回的记录先按NAME排序,再安ID排序
4 s3 |& g5 V1 u, t8 x5 hE.结果集中包含对NAME字段的描述
1 X. b! X1 Y) \6 K  G4 z- W! ~; X* D; l3 ~( z

$ [& G3 C, N! f12.以下哪个不是SQL函数?" g0 W) C2 R. J1 ^) h) U9 t
! o0 q, E5 K" ]) j
A.AVG4 X) ?/ E1 }4 Q9 o! c' Y5 P
B.SUM  i8 w- L/ V: ~7 h
C.MIN
5 ^. p9 c1 I2 J( z8 x! [$ {2 pD.MAX
8 }& e$ q+ ~, kE.CURRENT_DATE(). K( c: i2 G+ B6 D+ N7 ?; q$ o

0 X. J# N2 W8 ]& t
7 u$ _  }  Y9 h# V13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
; z! S# ~" ^% P( J1 N3 t. q9 m6 T8 Z0 O! j
A.该字段必须有索引
" t% Y! E: }2 L2 SB.该字段必须包括在GROUP BY条件中5 q: ]: g9 }/ P& N, F) e
C.该字段必须包含一个累积值
' U$ L/ G0 T- ?! L. r# _1 @4 dD.该字段必须是主键* }7 P- y6 ~! w% t1 b5 g
E.该字段必须不能包含NULL值7 Y1 J2 V1 D* i+ L

. O9 ^% m3 b  P3 r, @( v( q% |  V/ `" v9 r/ j. K  P
14.以下查询输出什么?
: w+ K/ D$ |# ]7 q& ]% M+ G, o7 K0 Q3 @
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2! K: d$ P( x: _
ON TABLE1.ID <> TABLE2.ID
5 ~4 T$ @; X5 A( y
9 \( W3 @& H3 v+ I" FA.TABLE1和TABLE2不相同的记录  D1 s$ v7 R+ x8 e& b
B.两个表中相同的记录1 k. f4 R0 F! M3 w
C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
, [6 s) e+ N3 x( m- P" FD.两表中不同记录的条数. z" ?# w" I# R2 n8 R5 e
E.数字2* Y' y0 G/ |& h# i, Q; U' }

2 F7 k- q. H4 Q; _
* S4 m. m* ^% n' N' u; X15.______能保证一组SQL语句不受干扰的运行?
- A. V; f0 n) Z5 g8 D9 |
3 t3 ?5 q! H* s  p, O2 g1 |答案:____________
& C5 z/ k) u: v/ W
6 ~7 ~% [9 r# J$ Q/ b" N! f* U' y
  @7 s3 ]& Q! k1 Z, ~# k
+ a' g) @: v* M8 z* R0 W答案速查
; U& b3 e  @; X' s1 o1:BC
3 C  W1 T. b; n0 X$ I2:WHERE
0 h1 k6 ?0 i8 Z/ T, W3:B8 h# J1 g8 S: i6 I! k3 m; y
4:E, e' s$ [8 g; E0 N! l
5:BD
" w4 A/ e' C6 d3 J6:INSERT: R! a6 L6 b0 N" O4 j
7:C
3 e# y) K( C: e! l+ _( a9 B8:A1 z5 j4 P0 Q! n5 g1 J% |! R
9:C; O! j& @+ o, s7 ^
10:E
5 j+ D' x/ P" \. h11:C
4 B7 [; v$ o- S# W6 k6 ~12:E  g0 o7 H! F! M# ?) C. T
13:BC- }% w$ z4 p# l/ f8 J9 D3 c
14:C6 V0 N2 G' N6 b4 T5 U' F& V* s) x7 ~
15:事务
$ @/ i; |7 v' F- a: D. _2 w, G4 a

8 a& B" w4 r9 i  c$ z
  z/ u& [- Y  z- }9 o8 L4 o答案详解
- ?9 a2 S4 k6 L3 a, s' ?9 b0 |4 Q0 Y
: f9 J9 w. M& ^6 M1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
5 A! l8 E4 c5 t7 G
/ H7 J. c, h6 [6 a2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。( Q1 X0 y* [# Z0 P
/ T5 i" T0 b, c- [
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。5 o, |7 |2 U  C, ~( m+ @/ M0 w

7 P% ~! S+ i- h+ J& A2 X4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
4 g* }% C, H0 `" G# {  Y8 E
) d1 r6 w( H5 j" A. I5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。" l: l, G+ b! K" D; U5 }4 u

4 l& `+ u. W5 @; C  I9 A6.答案显然是INSERT。/ \4 c: ]% X) Z+ X+ L
6 X) |6 Y9 n0 b. r$ k" E; e: {
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
0 P+ {' D4 v9 S$ P8 a1 e! w. E1 L5 }  k; e, Z+ w- Y' y+ B9 Q
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
5 y. c: N& R' E/ z& j
5 w) {* C# I) J! r; W1 M- h, g9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
1 ^% e9 y' ~! P. e8 k% r/ h2 Y4 W  s5 x" k! ?3 t8 Q7 F+ i" J( ?" _- d
10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
. \6 t9 N3 s6 {& W! r0 R4 h/ Y; F/ y$ l" M% f% o" x8 Z7 g
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。1 H; |; J! T% f: W3 I

% y5 x, [% c. O, V/ j12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。7 n- C' A5 J. S3 h( K
" T& J& _" ~5 w4 u) a7 A  I
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
8 Q0 {3 ^9 a' g5 ~+ P7 e  D
, V. F) F  R& q9 W9 ^14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。# a+ a6 U4 T, t8 j

$ @) k. M8 p9 }9 X1 s15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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