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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。+ D: m, ]- u* a. N5 O. A3 }4 D
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。# t% q* L! i- @! \3 ~! T
本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。  v- `( c3 w+ ~7 B" Q) k6 k2 U" T$ G! f! E
$ O  D9 `. Q7 y/ m$ }2 J# g- Z
; _) J+ R* {6 r2 s# W- Q
问题# _: D) W3 F) |+ J1 V  s% t
. M+ Y/ s4 i" x
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)% ?7 Q2 q' b* s

1 \, j+ b3 d) f% M0 QSELECT * FROM MY_TABLE' A9 M5 g2 T8 \+ ^

& Y' N9 P) ]1 q2 SA.如果可能,用把查询转换成存储例程
* U3 Q: E3 S& |3 g9 ]3 ?4 P9 u# WB.如果程序允许,给查询指定返回记录的范围
3 }) }' n2 k+ T# Q+ XC.如果可能,添加where条件( |" A# e" v  L; l" {  {. X
D.如果DBMS允许,把查询转换成视图
. F% G1 {7 Q+ Z7 BE.如果DBMS允许,使用事先准备好的语句( O; H" Y7 H) b; ?- Z. X: d

! h' _" Q4 s3 f+ u8 @5 a# j3 g7 h! ?2 b3 s" r2 G2 P
2.可以用添加______条件的方式对查询返回的数据集进行过滤?. x$ Y2 w( @9 ^* u
+ ~# ?. Y+ L3 R' P) M
答案:____________; a9 k( X& _% Y/ W
$ q1 o) x% L& U1 d

- ]  j3 u4 j& [$ G7 a" c5 H# r& A3.内关联(inner join)是用来做什么的?. J. S( a+ R/ c1 L- u
' y' u/ |3 i7 x
A.把两个表通过相同字段关联入一张持久的表中: q7 k7 C* Q0 j/ g% q
B.创建基于两个表中相同相同行的结果集
' A+ i7 ^* a% ]: U0 \! I$ k/ ^, iC.创建基于一个表中的记录的数据集
0 Q7 K0 e3 L- x; T' SD.创建一个包含两个表中相同记录和一个表中全部记录的结果集
/ b' M3 d7 `4 |7 `. f8 l4 TE.以上都不对3 \5 K) C; e. _4 C

. V; H8 X) g$ S* `' [
1 _; ^# ^7 I( E! |8 e7 V! v, z4.以下哪个DBMS没有PHP扩展库?
0 n( s" ?* ^( o( p
7 g8 {  ]3 J6 X' rA.MySQL6 t$ \1 o8 x1 X: E$ O1 `# u
B.IBM DB/2$ o; |( Q) ]/ D8 E1 X
C.PostgreSQL& \9 @* q" g; f* |6 g
D.Microsoft SQL Server
: u' J! n; Q) k6 T- NE.以上都不对
$ o6 x1 A9 ]1 ]( U! b' \& s  E
& K' {& r% H( m" H
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
4 V# ]" Y% x* t0 w
! w- C, s0 F) z: _* Q; d8 B* D<?php
3 i* C1 m4 K& Z' p3 t1 Y' V! ~! a$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);. K) s  s! D8 V& O) e! w
?>5 l) |  l& ~# l4 c' R9 _# u  y

" S; e* [; n" o$ C, V* p1 b8 tA.MYTABLE表中的记录超过1条
4 M+ d9 J: Q; Q7 O( [3 \. G4 s; B  h8 MB.用户输入的数据需要经过适当的转义和过滤
+ Z6 I1 e$ \+ P1 ?- u7 v$ [9 aC.调用该函数将产生一个包含了其他记录条数的记录8 v! H  j: E# \! D3 U/ ~
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
) U* [2 `3 v* g# ~; AE.查询语句中应该包含数据库名
2 n/ b1 g' u% ]. C! l( E# ^; g$ {! I( K7 L: K7 T

4 X, Q- ^  X; r& X) f. _8 s! a% t" W6.______语句能用来向已存在的表中添加新的记录。
' _7 w7 O( E4 A' B. o( I& `/ o1 l
6 `# d- {1 C3 b4 |$ ?" m8 B答案:____________9 V7 X  q& x; M1 k
; V  ?5 `4 [3 d1 C/ `/ Y, C
: ]) d0 p: B/ E9 B. v7 r+ n2 I  j
7.以下哪个说法正确?
0 ?3 n3 K/ T5 C: C
. |' S3 S$ B- d, |' ]. Z' l8 Z4 rA.使用索引能加快插入数据的速度
; B/ K! u0 t" I: [+ s% W- wB.良好的索引策略有助于防止跨站攻击' |+ N8 z$ h5 X  C
C.应当根据数据库的实际应用按理设计索引
, o5 W' f( |7 h$ l/ o. r$ rD.删除一条记录将导致整个表的索引被破坏0 c* ^% J, g3 Y3 I# h" J3 T
E.只有数字记录行需要索引0 _4 s  L9 O  r" }6 X
- N0 l: |5 U% [8 r/ D
0 M% u" G: t" j& b
8.join能否被嵌套?
7 z; j- y0 M$ f0 x; ]" N6 @0 W) G' u7 B+ R
A.能9 C1 i$ J5 _3 v
B.不能
, a1 k# W# j8 X2 F) w. N; ?9 y  D+ |# @# b3 x: ~# b# E% Z- c* m

1 X: A% y0 ^0 \% p9.考虑如下数据表和查询。如何添加索引能提高查询速度?
4 s8 ~/ V4 k) r% M& q# i2 O
- t) R: C% o# l. N8 ^) tCREATE TABLE MYTABLE (
1 O! F( k' J2 d! J+ ?( K+ a# GID INT,
' S* d/ N5 m& R% q, qNAME VARCHAR (100),
: d! p  E. T- x, D: L1 wADDRESS1 VARCHAR (100),9 V% Z" ~8 {4 g
ADDRESS2 VARCHAR (100),) _+ U8 J  P, k4 I
ZIPCODE VARCHAR (10),% S6 |: K" t( F1 C
CITY VARCHAR (50),
- H. e+ C+ \6 l5 L! KPROVINCE VARCHAR (2)! r! D+ X5 v9 A" K+ ~/ N
)9 l9 S! l5 S. N
SELECT ID, VARCHAR
: N* E( S$ c# s; n0 }+ vFROM MYTABLE
0 W6 D7 Q& ], c6 P  `$ O5 G7 |" `0 U' MWHERE ID BETWEEN 0 AND 1006 n" v! h6 G" _! E) H- D) Z
ORDER BY NAME, ZIPCODE
4 f# D7 L8 _/ L- M, m) Q6 [: M3 X; _6 f
* D+ g& D: w& L7 M7 F+ t' gA.给ID添加索引: }  X: \0 x$ p
B.给NAME和ADDRESS1添加索引
' e4 h5 o5 x/ W9 |# G( N) `" zC.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
% }6 L7 l8 p& P) bD.给ZIPCODE和NAME添加索引2 W% \. o1 Y% p; @9 X/ V1 y2 g6 m& W
E.给ZIPCODE添加全文检索  q' n+ Y3 W) y; g9 J+ g3 Z9 m
% p( e5 R+ q4 w- e6 ~' `; t; b7 M
; L- `' C% e1 X) ~
10.执行以下SQL语句后将发生什么?
( `/ h/ v0 J6 J4 V; Q  S1 I; O0 o- X# H+ i0 k
BEGIN TRANSACTION
0 Y, m+ O8 b4 v* h5 oDELETE FROM MYTABLE WHERE ID=1! s9 C. F1 L5 |( R7 |
DELETE FROM OTHERTABLE
" o4 q: ]4 w& ?5 o6 M8 qROLLBACK TRANSACTION: ]9 d( p- D/ C8 N5 f9 y
: f! l% D5 p% J+ C% ]
A.OTHERTABLE中的内容将被删除1 ~" |; e8 Z5 y' }4 U7 b
B.OTHERTABLE和MYTABLE中的内容都会被删除
1 t6 h  P4 g+ C5 RC.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
1 m; o$ J1 e6 {D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化0 m, K9 \) ~" [5 t7 g
E.数据库没用变化. O- w, L1 T8 s9 a" k3 g
2 K2 z0 P$ \4 \

  z7 ?5 B, K! z6 h11.DESC在这个查询中起什么作用?" E2 V7 Y0 F* i8 x0 _

$ v! v. ], j6 h' ]3 A8 ?SELECT *
# g( B/ F$ G) kFROM MY_TABLE$ U* B6 z0 e2 U* ]
WHERE ID > 0
) s" l. y2 Y- O) W! w7 S/ b$ VORDER BY ID, NAME DESC/ @3 [( M! z8 X- [

* v: X4 M* ~/ A% ~9 H* uA.返回的数据集倒序排列
! L, c7 P0 V# h7 yB.ID相同的记录按NAME升序排列
8 Z0 g0 I9 N- x% V: j" KC.ID相同的记录按NAME倒序排列
; M3 f0 E( K5 T* B! yD.返回的记录先按NAME排序,再安ID排序
$ b% Y* _) ~( t8 k4 R0 sE.结果集中包含对NAME字段的描述
% t, a& y7 R/ c" J& E  N' j( Y
) [% b% k2 }2 w5 z7 n. e: h
  o) g8 m3 n) j" {12.以下哪个不是SQL函数?" X; f$ \+ O$ v

  l6 r. b2 w1 ?' k$ {) h6 LA.AVG
9 }4 K' ^6 V' n  `# U8 gB.SUM$ }; R9 ?' J# l+ E6 ?" K0 K; K
C.MIN
9 S! A  C: W4 Z6 ?& z- X& ^3 y6 m* iD.MAX# ~' D' a2 t' f+ {# l
E.CURRENT_DATE()
8 B+ A5 D) m! W: ], _5 Y& T
" l+ D, \' E  ?$ h6 p% ]9 c4 n5 Q( E
, H2 w( X# G, a9 |! o. F, ?13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?! l" E) C( n' t& o6 \* t; T
$ K  r- i5 }# L* z0 N1 m. x  `
A.该字段必须有索引
+ E2 P, t4 ?7 M, e2 ZB.该字段必须包括在GROUP BY条件中
- w+ d& b& L. l9 Q6 JC.该字段必须包含一个累积值
, L! z% m: x) n7 N  F0 d/ ]D.该字段必须是主键5 @" [, r2 i) t$ S0 A+ Z6 G
E.该字段必须不能包含NULL值# S! [$ L  {% P0 F/ L0 J/ p

1 k  ]0 B" S' u6 F2 r, A$ y8 I& B/ x  g3 D. y' J/ w- M- ?3 X2 C
14.以下查询输出什么?( L. ^' w% _1 B9 j/ V
: }7 g5 V& O& H! z+ w7 h5 z
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE23 E7 v. E0 a+ J) W
ON TABLE1.ID <> TABLE2.ID& q# \) ~) i7 S, B: Y  U

& }! A. U- u0 M/ H2 c$ E4 n* HA.TABLE1和TABLE2不相同的记录, c$ J$ [! f  M  C- S
B.两个表中相同的记录
* Y+ `) E  j) B4 X- DC.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
3 ]0 Q) \% I' }3 R$ I  T$ V, }- j1 s( RD.两表中不同记录的条数
/ Y( m9 |6 L/ s5 J. lE.数字2
+ c3 n4 h1 @8 I' P$ X! _2 ^4 \+ Y: B9 _

6 s; @5 V5 C1 K. S' P& R; m7 Z7 Y15.______能保证一组SQL语句不受干扰的运行?
) z$ `$ p  y" ~) h! i' ^5 N- x- O$ ]
( l# M. a6 l# `: b答案:____________
9 T8 y  @) D! p" f. T0 o' g
( k3 c* @, M6 ]# v6 h5 d9 k( n
2 ?: I& Q( a2 n5 s% A0 q8 ~" y# t: I
答案速查4 W/ ]" J# ?7 a- ?$ b4 t( o
1:BC" y. b6 q. j9 T5 B
2:WHERE# A+ z9 H( b6 U2 u; E0 g' ~$ s
3:B
9 s' Y% `4 Y; n( @2 k8 q! H4:E
- y! y% p+ Q4 o$ J5:BD
! x3 T$ u* ~. O' ?/ @6:INSERT) U' Y$ c; ]$ |* k# l
7:C
+ G1 f' \( C3 _1 w+ k+ r8 D8:A
1 t% E. h' g& p7 i# m2 J3 V0 N9:C
* R* M9 G, p9 P& `& h/ @% x10:E
$ I' y1 S% m9 V+ Q; O0 E0 q11:C/ b. B7 l6 J2 v& _/ z$ Z% B' b
12:E
4 o- h% g6 a# E) ?2 U13:BC/ p# F  g$ t) U6 u' S! Q- j! z) v0 I
14:C  z4 N/ w4 L8 K$ j& m9 w
15:事务
" c* H/ c- T. _  N0 B. p% C$ Z& ]

* P, x( J9 x% T' S
7 L* l3 H' c- d( y答案详解/ K# T4 j  p5 H5 i, E- P, T% T. \

/ l% w1 T+ Y+ b& ^5 ~& f/ _1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
2 {: L1 j3 l5 v  W
& z' l* `# W/ ]2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
" H8 g/ q# [& U9 h5 O+ {
  ^2 V+ l- s9 F/ C3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。/ V+ i$ I/ `+ H) g! l* N+ }$ g
/ M: ^2 L' `% n  i6 K4 _# g
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
# x, \, Q! u; z( q0 ]: S  z( m3 d
. i2 x7 [# ?& x5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。$ O8 J* L: C( k& w0 a$ f" e

9 Y+ ~# }( b) y4 J6.答案显然是INSERT。
) K! Z4 _9 v9 U9 n) C- ~8 ?! }* i
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
" x, Y$ M2 C" q  F4 S0 J0 N$ B- l6 j8 L+ a5 V; E9 F- a: @
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。, F4 q# X) k( m. d. M! b) W( b
4 |- c- z& ^( X+ s: \: r, ~
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。4 r' V1 f# f* R. p0 s

8 v/ w+ s4 G$ {, x' c- U10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
* R& V: F9 P1 O6 Q$ b; x
2 H1 B8 ^8 U& x8 a11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。5 W9 U3 K: Z+ \5 ]
2 r$ N+ t: U5 K+ ^
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
6 d9 C- ]7 G( F' v6 J
  l) O! {; J* O" g4 H13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。( O( Y+ }: e. F% m) E4 V0 F

  D% {' m4 e: h! [& q8 }! O; E0 [) h9 J14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。
% N$ z7 k! l! P" J) M" H6 y" Y: k! G8 w. c
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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