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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
3 ~1 T, Q0 K: @8 [  B( G: TPHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。$ O  x2 ~" J' B; |" P2 |
本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
2 A) ]9 \, t/ m/ f( E' f, z' e5 X% S5 A* e0 o; |  m/ t

3 I+ U  D, g& S( t$ F( J问题
: V; e: F4 F. z( Z& J4 I9 _8 {1 {. b$ H: Y/ |, `4 d
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)
. S% g* j, q  \; u6 K/ T7 H! V1 R5 r2 O' ~/ U7 X
SELECT * FROM MY_TABLE
7 X6 s- G; _( ?% x+ e. R' `
" ~) m0 F6 g# XA.如果可能,用把查询转换成存储例程
7 W' _0 q5 s: eB.如果程序允许,给查询指定返回记录的范围# F6 s5 G# P6 @  f6 @  `0 X; U
C.如果可能,添加where条件
+ J: @& h- `8 S2 \+ lD.如果DBMS允许,把查询转换成视图
: ?0 z6 w1 r8 D+ `E.如果DBMS允许,使用事先准备好的语句
$ d" m" {. w& |3 Y; q
2 F+ }7 @" i: u& H
# v* d3 D7 j. H: _3 F5 }2.可以用添加______条件的方式对查询返回的数据集进行过滤?
3 l0 x1 w" I% a. i& m% O9 u' \5 ^% n9 a! y6 d
答案:____________
) C* {3 M  c8 d- \( p6 r5 p* J" v/ ^7 X  z  {
8 m; D  V- b0 m. y+ Y
3.内关联(inner join)是用来做什么的?% N1 P! V/ m5 t1 |

5 V+ ~* C( o5 N. M% @A.把两个表通过相同字段关联入一张持久的表中0 U: J1 l8 S( l* m7 `
B.创建基于两个表中相同相同行的结果集$ u. `% I3 {4 g- R
C.创建基于一个表中的记录的数据集9 @- c8 a- o: [+ v
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集& I3 p4 r2 B2 i. A, @
E.以上都不对
" \8 R. j/ j" \1 B
7 A0 w/ D( _# ], T% d
3 m1 J, f8 l# w; G- O: t0 {4.以下哪个DBMS没有PHP扩展库?
! @3 |! T! e2 f* h1 ]0 {: I, M5 \; }! b6 j) L& B6 X8 _
A.MySQL
5 T1 P+ q2 ~3 b% A; k' I& C7 i% B; HB.IBM DB/2
  M" r1 }' Q* O9 n8 i5 AC.PostgreSQL
) O5 \- A- ]( v* k8 a% pD.Microsoft SQL Server
; E8 r) i+ H* z7 Z/ [: f0 uE.以上都不对
* U7 V- s1 r, o3 H; {0 G: \
+ r0 }9 |' Z* N% H
! f8 f* }- |! O4 R" b2 b- H( N  f5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)7 f- V* ]3 n1 X2 v" q( W
0 P2 C8 r' @6 G) d+ [
<?php* [, ]$ m( R  P& q7 I6 T
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
% J4 |0 z6 _4 V+ Q* {' f7 g2 N% v?>
  C  ~) E8 E. j: V4 g5 k' J# s% n- c: }3 g! F2 }$ D
A.MYTABLE表中的记录超过1条
9 [6 h5 Y# ]9 ]2 e6 V8 vB.用户输入的数据需要经过适当的转义和过滤
& x/ p# @( \+ Z3 ~( S" a8 ^6 [C.调用该函数将产生一个包含了其他记录条数的记录7 `; r! F7 Z9 T3 x& }3 i
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除( t5 y9 k0 I1 ~- y# i5 g
E.查询语句中应该包含数据库名
6 |" i0 F. k) ]2 k  p7 ]. V% C  d' ]

( D0 y! B2 T- R  r# V( Z( {6.______语句能用来向已存在的表中添加新的记录。5 C! I# F; X1 r+ q9 R6 j
8 p4 B! I% ]; q2 X& `* P, i3 E
答案:____________
6 d6 P- K# I- l9 j- q, o1 u
' N( v3 A9 Y- J3 H% V, x
$ M2 B$ b7 n6 N; z1 j% Q: F7.以下哪个说法正确?
. D9 X* p  V# Z- ~) n$ e! S
/ W0 t/ D4 l+ O9 @A.使用索引能加快插入数据的速度
  L1 h! D9 k% ~: [B.良好的索引策略有助于防止跨站攻击
# M$ r0 v+ z- ^( I1 p9 n' B: pC.应当根据数据库的实际应用按理设计索引
8 |. O* S+ s7 T( R' U, @D.删除一条记录将导致整个表的索引被破坏% \# g  }$ W( k0 O
E.只有数字记录行需要索引/ G1 A* X4 ^+ P; y5 j6 j

5 G# C- a! X( ^2 r% n, O5 c0 P. ^( n: \. M, G# Z
8.join能否被嵌套?/ V3 I! G- A1 J2 X( W8 G2 v
$ n! H7 p8 T4 ~
A.能
( n2 R; s: l, R1 VB.不能
+ {/ Y7 {8 O0 E& N4 N" V; z3 w4 q& B! o

2 U1 q" f3 I* f9 H5 E9.考虑如下数据表和查询。如何添加索引能提高查询速度?& s- [( U+ ]& F; A
- @. R; K2 H- q# @( K4 ^) r# p4 B
CREATE TABLE MYTABLE (
8 y7 J8 \# i0 n' D+ `: S2 E2 L! XID INT,7 m! d/ y! U. ^6 o9 Z1 b
NAME VARCHAR (100),
9 M# V1 c& N( L) ~, JADDRESS1 VARCHAR (100),
# I; Y) g* \8 ^( e3 j6 a) zADDRESS2 VARCHAR (100),
( l( k' J1 p+ G" V) c7 H( wZIPCODE VARCHAR (10),
9 y# l' V, M7 V' Y- N, T' z- [CITY VARCHAR (50),3 W! ~7 `) I2 F1 `: {
PROVINCE VARCHAR (2)
) n) e( H1 w2 C. ?  @)
* _2 d* k0 A$ @3 x$ {; aSELECT ID, VARCHAR2 j& R# j% ~* a1 j
FROM MYTABLE
3 j* k2 W1 L# z: E- Y( G+ ?WHERE ID BETWEEN 0 AND 100$ ]6 E/ D% \" ?! l% U5 S  l
ORDER BY NAME, ZIPCODE
; w/ m. P/ t7 U0 h6 A" B/ B/ M8 f! N  Y- x0 x; A7 R) B1 b
A.给ID添加索引
/ u; t+ z- e" F% y- H6 UB.给NAME和ADDRESS1添加索引9 K8 ]! Z6 X1 I8 @+ n3 s6 }3 p& A
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
, s' V5 u; I2 L6 C4 s" x! ID.给ZIPCODE和NAME添加索引4 R  z6 U, X( u: U9 U1 ~
E.给ZIPCODE添加全文检索
5 ^! s0 A& M' z3 l
. J* B- F6 O% ~; W3 v! |( R+ N# t# |* \  N5 [0 c6 v7 o  H5 B) L
10.执行以下SQL语句后将发生什么?
8 r% {: _# k6 a+ p. @& v9 B' ]; j: I" U  q4 }* _
BEGIN TRANSACTION
' u8 _* c- ~, H/ K0 s6 g. @4 FDELETE FROM MYTABLE WHERE ID=12 S& e. Q" V8 I1 k: ?
DELETE FROM OTHERTABLE% \( i$ Z8 x8 S0 @& z
ROLLBACK TRANSACTION
9 V# d# J/ J8 s0 s% S1 L# U# r4 P3 u* R% k9 m/ `
A.OTHERTABLE中的内容将被删除
) L& }0 e  {, ^$ K+ V) g% ZB.OTHERTABLE和MYTABLE中的内容都会被删除1 ^9 ?" v0 K  R+ o, ?" ]
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
- s. u, Q% W* YD.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
" l  A# Q# R7 g. C* ~6 OE.数据库没用变化
3 X" d0 X- E( ~% N1 V; _+ N0 ^. T% u
: n; q8 s3 W) R/ \/ J" @
11.DESC在这个查询中起什么作用?) _; y$ W) R7 h& \

8 H0 `0 S/ o/ W$ gSELECT *
3 e' O$ w7 f+ ]: B9 |FROM MY_TABLE
* w2 Z8 {4 U! ?1 n5 Y9 P- O- PWHERE ID > 0+ _5 Q. L' x" U3 G7 J
ORDER BY ID, NAME DESC
* M1 A7 N$ n* ~$ M' U* O* w! {: x, U9 v# F5 ~4 ?
A.返回的数据集倒序排列0 z$ O' q/ L& `
B.ID相同的记录按NAME升序排列
9 ^/ k) O+ b6 c5 m( q7 r2 HC.ID相同的记录按NAME倒序排列
8 R! g( d' }! hD.返回的记录先按NAME排序,再安ID排序9 [# G7 W' z4 r7 o% {8 {
E.结果集中包含对NAME字段的描述  A- J! ?, D+ z; g* m
9 T5 g4 ]2 ~' [+ ]( h
& O& {$ a" K2 e1 P" U! w8 p/ X
12.以下哪个不是SQL函数?
2 g3 g  o( ^3 `) I
$ Q4 E  @' L7 }+ t. LA.AVG
6 U' B# J. @2 `1 z7 ^1 y8 j/ wB.SUM+ V! y4 ^' a$ F! J
C.MIN
7 H0 T8 ~7 w6 [4 i- @* z1 ?8 W9 l$ lD.MAX
( r9 _7 Z' Q7 g9 M8 n5 {E.CURRENT_DATE()2 C. b! f/ V  D! K
0 \) I8 x2 ]' O8 c7 k* z6 j5 P
  C3 u4 @7 w; e% g, U( `- K
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?0 K' t( _. k/ a4 q$ |) Y

2 ^$ ^. z% _9 KA.该字段必须有索引! g' T6 U. g; y4 V
B.该字段必须包括在GROUP BY条件中( ?" R6 i6 q: Z; }
C.该字段必须包含一个累积值+ R! \3 e/ q  V3 f/ M
D.该字段必须是主键
' ]3 ?4 L2 F, d* a/ DE.该字段必须不能包含NULL值
2 R# e. o5 ?( y, e) F1 Z
1 T; y/ S  F$ s4 x8 _. s" y9 I) i/ B& J7 t3 V8 }8 K
14.以下查询输出什么?! h2 Q5 g2 H1 A% Q+ {, i

* \  }+ E1 l: w% n6 cSELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
4 S3 F- T' Q' z- W6 SON TABLE1.ID <> TABLE2.ID
% g  u) c+ a, @: C; C+ m8 V9 w3 C. i( v8 y) f
A.TABLE1和TABLE2不相同的记录1 K8 e$ ~3 b" V; |' `
B.两个表中相同的记录
5 s4 D4 r1 X0 w; XC.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数" d- D; A( G7 }7 j( T( D
D.两表中不同记录的条数' F+ j3 c$ n2 _9 C. x6 X7 {
E.数字2; j- y( }6 T; p6 p
5 X" Z( ~: g1 V3 i0 G
7 n0 K6 a+ x6 |- k$ Y. G* z8 b$ M
15.______能保证一组SQL语句不受干扰的运行?2 M& G( E! J) d. B& t% b, w
  c" C! S, }9 E( m. d
答案:____________# O6 x  c  @$ C0 u, k' R4 W* V( j

* E9 i! w/ h7 q3 o9 ?' x9 [5 ~1 ^9 L3 D( F# b- H, N+ w$ k
& f0 l2 D  X! D8 k/ A& \: v
答案速查. e/ K) i8 P" _2 d) b
1:BC2 L9 ]0 G4 ~' \( A# ^
2:WHERE# P. t/ Y$ d1 H/ X
3:B
7 F0 K) q2 g; e' p; w  b( S6 l4:E
8 V+ O- B' Z2 i8 _2 Z: C$ t5:BD+ D4 p0 r& h) J" S7 g4 F
6:INSERT
  l$ j  g  Q+ Y0 u! O% L, P+ ]( L2 S( T7:C
; e8 `3 F0 h1 I. ]5 W5 X8:A$ V; h: H" |4 _/ P* ^
9:C
# W% y0 B/ ?# @% e: ?0 U10:E+ x9 B5 d' Z& l# N5 A  N
11:C4 L7 l. j; z0 `" c
12:E
; I+ f6 b5 C7 z" _6 |, l3 g13:BC
6 j% L. h8 @- ^1 M14:C
1 C3 ^; x; M% E: D" Q15:事务
+ K5 {3 L( f# Q( U- U
. M% y8 t$ C1 Y# k  N+ L$ v9 `% p( E7 ~8 }5 ?0 P8 D/ A/ R

  f  K  ]" d" f9 |; p. c* h5 f答案详解) x" m& o- M& k$ ]# h' x. p& D
  ], o- u( K) b: t4 ]2 ?( [2 F
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。5 U- F9 y8 U% W8 m; ?1 }
4 I3 V9 J  w! \) V- i- f" h
2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。8 l5 p& h9 E: N8 \: o! \

) E$ ?1 ^( K; {3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。9 Q0 t/ Z+ Q+ X1 }  h- A6 o

, m' j3 \( c9 l* p4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
) y6 r1 i" d5 M$ `. S
4 W1 a9 [! [; E1 }5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。
$ M( V" R# Q3 j. h* K  S4 T
% I- A) ?; \1 k. H: @. j1 c( H6.答案显然是INSERT。
) O" M* r  w. x5 s/ R' ?
( @- ]1 p8 n$ k4 y" ]+ }, Q2 g  R/ g  j7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
* S( k$ U# v4 B1 d7 F: y+ W6 ^  h+ ?' {- T
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
( f, m* ~% L2 N4 O0 D( H4 c; }# O% X7 [3 D! S
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
% [$ T, X2 S# `- N9 J. r6 ~; J' Z; Y1 R
10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。1 V. o" \: I3 \5 v2 d; K( A- f
6 D7 Z$ A; Y+ Y3 z6 R
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。- P& y7 `, ~- G6 x: W
/ @7 b: M5 c0 Q( K: v# i2 p1 K
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
" J3 M7 @) \3 i( |) w
6 e8 L" I2 P6 E2 x8 Z13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
% R5 H: i5 w9 F9 ~7 }8 e& m* _; X5 j  r$ J7 P) I9 |. v
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。2 `4 Z3 J' X) d& G

! t% P5 Q# e; `; W4 u7 ^* Q15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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