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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。/ a* k/ x4 ?$ M% l4 N" c
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。" |) r& ]* j8 T: l+ {
本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。/ C/ ?, W& p/ X- f' }
% g1 p0 j5 _; K$ X1 @7 h% R  K' j$ {' n

: d2 ^% W4 T  V' |/ K, D( i问题. l: ?* U. d' C& h5 A3 ^

! C! E$ _& u+ i: f/ r( ^1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)8 N, M8 G0 q2 |

8 Y- z; r- S1 f$ \" t8 aSELECT * FROM MY_TABLE
$ B4 t# A! b2 ?# O3 ?1 r2 P3 k; f2 T% l$ K
A.如果可能,用把查询转换成存储例程; P2 l2 C+ |# d7 S. K% ~; a( S* Z
B.如果程序允许,给查询指定返回记录的范围
5 ~/ X/ @- O/ c0 T+ \6 o  ~C.如果可能,添加where条件
# @& {- B1 ~9 E4 c3 m8 JD.如果DBMS允许,把查询转换成视图
( D7 S2 R" L) K3 ?$ r4 VE.如果DBMS允许,使用事先准备好的语句6 [; J+ ?, U5 T. c, t# D3 {
: o, K% h0 p0 k- x& z
* L3 ~. I- s6 u* k8 ^
2.可以用添加______条件的方式对查询返回的数据集进行过滤?5 v4 N0 i% N4 i* _5 d0 N

5 x  Y. \0 b1 Q9 U5 j答案:____________6 m+ R" {, g& I9 X5 n* _( W4 g: f
( s0 f( p4 t/ {9 \, q: \

. A8 m  L2 s# X) ~3.内关联(inner join)是用来做什么的?1 u. F. ~  I0 z. e+ \" \1 Q
  k% q' D) {  ?
A.把两个表通过相同字段关联入一张持久的表中
- x2 Q. C( a/ L2 mB.创建基于两个表中相同相同行的结果集8 N# z8 z0 a) d2 q# K$ O
C.创建基于一个表中的记录的数据集
4 p. u; L1 ~0 V2 hD.创建一个包含两个表中相同记录和一个表中全部记录的结果集
( C% Q* X5 c: ~E.以上都不对
' L+ {: Y6 h' w+ H9 E4 b& M, L2 D; J8 G7 v+ L0 E6 U- B  q4 f* O

5 T* ~% N$ Q! }4.以下哪个DBMS没有PHP扩展库?
$ Q& J% p: y& O7 {) d
! ~# F' {. @, s& E5 {) ~A.MySQL5 C7 R  d$ [* x7 ?$ g& E  ^6 M/ G& _' `
B.IBM DB/2
8 `& t% s# o) e' `C.PostgreSQL5 F- C/ w! D) C: W4 O
D.Microsoft SQL Server  I. i  m7 O$ `4 u" Z$ Q1 n3 F0 h+ a
E.以上都不对* L6 T: x6 z" w+ v8 s0 t
. }4 _( n% s4 w/ ]: o3 d
+ F( c% l" b) s5 \% j; P9 L2 ]
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
" G) L, f" C3 d4 |. O7 |: a; M3 G" g- M  a+ p
<?php
7 ]' O4 _9 ~5 \: R  f4 R$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);. j, l6 p5 ^9 t( X
?>
8 m4 C! o$ {' {/ I# Z
2 y8 X3 q% v3 o" G! z6 |6 DA.MYTABLE表中的记录超过1条
& z/ d& n, o$ K0 d) c0 v6 RB.用户输入的数据需要经过适当的转义和过滤$ k5 u9 n7 J& j/ _3 A9 r
C.调用该函数将产生一个包含了其他记录条数的记录) z0 x. ]/ b: [
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除( _4 x8 R& H- ~8 ]6 ~3 O9 x8 m& j
E.查询语句中应该包含数据库名
8 k- G! G1 u! b* G8 u* H+ G+ k- C; x7 x! n+ u8 H$ s/ h

! F5 P5 k! F0 {6.______语句能用来向已存在的表中添加新的记录。
8 r* ~) H  S7 V( v% R
7 v3 K' ~( g% d  m2 V- e答案:____________% I( ~; r7 C3 Y  K6 s

9 r% s" E' d1 _/ q# ~9 K6 d/ K2 [) f. g
7.以下哪个说法正确?# }3 C" Q9 J0 e" L+ V
7 e7 u) T/ j+ k# d% X7 F9 O
A.使用索引能加快插入数据的速度
( M5 F2 j% k) t- B9 k( m' |B.良好的索引策略有助于防止跨站攻击9 o# y; B. x- i2 D  X& \
C.应当根据数据库的实际应用按理设计索引& S# j' a( x: K: E7 |% a5 R
D.删除一条记录将导致整个表的索引被破坏
& E! d( b* ]; K2 H/ s" E1 m) Y( i5 hE.只有数字记录行需要索引
' {$ u; l6 x+ Q$ C9 f2 W8 E. [3 b0 D" G7 p7 A! L
5 r7 a7 V, n7 f$ Z8 u6 i
8.join能否被嵌套?( V5 H+ P1 @) D9 l

4 ?/ t- H; y; \) |4 B  g, VA.能
+ F* ]  o4 R1 K- D8 ZB.不能
  k( y# C5 x2 X/ k3 A* p8 c% f/ C
3 I; n# z1 c- C4 x
  ?! }8 J8 [: `! q: G+ U9.考虑如下数据表和查询。如何添加索引能提高查询速度?. h" u; H1 T. P. @1 V
  _% ~3 c, \/ ?, I
CREATE TABLE MYTABLE (
  T; O" e# ~; r9 D3 N( K7 lID INT,
* O; U1 c1 ^4 ~5 ]% MNAME VARCHAR (100),
3 q: t  O# z4 f4 W: J- JADDRESS1 VARCHAR (100),
- V7 ~- B8 w0 N+ c; X. `ADDRESS2 VARCHAR (100),% F3 y1 [6 g7 |3 u2 v
ZIPCODE VARCHAR (10),* M6 D7 y# I& e# o! A; Y
CITY VARCHAR (50),  i" O$ n* m6 L' o4 ~
PROVINCE VARCHAR (2)0 P9 h  J- `- m
)
$ T8 I! X: c+ W, ISELECT ID, VARCHAR
. N0 f) X$ h" @# M& ^  ?FROM MYTABLE
; \/ y3 e" v" B6 G* }WHERE ID BETWEEN 0 AND 100
* j$ S- q* [  L) ]5 o; V) zORDER BY NAME, ZIPCODE" f1 J+ d" p! A: ?! k

. B; U) I+ ~6 R* ZA.给ID添加索引, i0 g( g1 y4 {5 e8 @: `
B.给NAME和ADDRESS1添加索引4 ?/ J' q. K9 S
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
% W/ \+ y7 w9 q4 Z/ hD.给ZIPCODE和NAME添加索引
7 J3 V- }0 u+ r1 DE.给ZIPCODE添加全文检索# d% q( V# x9 p( K/ W3 w% o% a7 \

0 _) o8 X5 H# s2 @. o$ z- _; U- y1 _% z' }
10.执行以下SQL语句后将发生什么?* \1 H; X! M' w4 J
* A7 |" U; j% j0 V/ D
BEGIN TRANSACTION- V+ i, m: c% i4 G) V& [8 X
DELETE FROM MYTABLE WHERE ID=1! K# e( F& R6 }
DELETE FROM OTHERTABLE0 S  D2 g# n4 |; @- `) W8 I: [
ROLLBACK TRANSACTION. X' R( k8 h1 l- l9 J

* I- h+ }! P2 C8 z# n% C- Z" CA.OTHERTABLE中的内容将被删除2 \8 Y2 B  i/ W% \- ~
B.OTHERTABLE和MYTABLE中的内容都会被删除8 }; K  O8 U# s  G
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除3 F* P3 [  I6 o, A
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化! E$ T- X1 h# L. g5 K/ F7 Q
E.数据库没用变化$ E* L/ w7 v" }1 n, u
2 O! i- [. p* b8 T+ V  z. l
! z' n; w" }% h- U  |
11.DESC在这个查询中起什么作用?) s" t4 v7 b0 h4 c! j) ^; g
, q$ V: L* ]: R, J" j" L3 r9 x
SELECT *" |: t+ `+ _" s7 |# Z) u9 {2 R* S
FROM MY_TABLE
  _$ b/ E; q, @+ R. M5 KWHERE ID > 0* y4 |6 P! A, I# E& l3 e
ORDER BY ID, NAME DESC8 p# Y. i/ j, c& C4 H

6 b& k, O- l& @2 E7 I" I# ^* wA.返回的数据集倒序排列
9 V& u7 Y& t/ ^) }7 E( I  y7 C1 {B.ID相同的记录按NAME升序排列) Z' p# A2 {- s( Q1 w
C.ID相同的记录按NAME倒序排列
  X  Q- z& r+ h+ J- Q+ OD.返回的记录先按NAME排序,再安ID排序
# p5 @. U* g; EE.结果集中包含对NAME字段的描述4 T6 u; e( \2 ]0 _9 E
) q4 B6 c$ s# B$ N9 h+ [
$ H: l/ x; I: r9 p4 S# A
12.以下哪个不是SQL函数?4 I* D2 @( X2 n( X( d6 ?& g& d% Y9 x) f
2 G2 \; H0 g! a% m- ?' x$ ]
A.AVG0 y, `7 |6 W/ T, a! b
B.SUM
% m% P5 B  o2 T* `3 bC.MIN
2 t9 d, m8 k9 Q' {. l, N! FD.MAX6 y+ R0 M' e7 [' }
E.CURRENT_DATE()! @" t. b, @9 }7 _8 J) M5 r

  ]/ k( |( p# z: B: w0 }& l0 V+ B  ?6 x, }
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?. x2 i" s* s8 \7 [7 g

& c( N- k% X  ^  C$ d2 u% v+ ZA.该字段必须有索引
; Y' D& l* K, |2 FB.该字段必须包括在GROUP BY条件中' z9 ]' N! c$ J/ `# T$ U0 ~
C.该字段必须包含一个累积值6 l/ V* c  W3 J8 ^% W" b
D.该字段必须是主键+ w0 V! i" U- b7 o0 q& }/ Z
E.该字段必须不能包含NULL值5 P: x- `$ j+ n$ X9 @  T
( K8 L" m( k6 M8 a

- Q0 ~! ?1 g  O' g2 Q2 X14.以下查询输出什么?* C1 b  ~" h) A
8 R1 r' }  X( h9 z
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2" _$ A& {5 _* x4 [/ Z2 F
ON TABLE1.ID <> TABLE2.ID
( o4 C% \: A) o; I" C' x2 m; q5 r- g* l, L  t
A.TABLE1和TABLE2不相同的记录
, U& o1 x. e/ G) LB.两个表中相同的记录
( d" j- o+ r, K$ }. V  C# [3 |C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
* b1 F- q% u$ R' K9 l0 }7 g; fD.两表中不同记录的条数5 I  H6 C$ H% F( ?
E.数字2
$ m3 K. T4 @5 z
4 L% `2 k$ l: J  U, i
7 g! \3 [5 z" A9 v0 X15.______能保证一组SQL语句不受干扰的运行?; Q! P/ q6 l6 @
! V+ X; [8 r9 X* K& E5 s
答案:____________- y5 s" ~( n9 e7 P; B6 U

9 f0 s% {0 O) ?& m8 h9 Z: ~0 H, R8 P
. m3 |" ]+ G4 Q: ~
答案速查
# }" }" }9 n, I: k/ l; b* |' K6 Z1:BC6 }* I1 b4 v0 X
2:WHERE& S# e+ C9 [! ^
3:B
, ]2 n9 J+ J/ [$ G! S/ B4:E0 K* d4 P  ~0 e2 R1 {6 t- X
5:BD
- D0 j( o* F% y8 f  ~0 |6:INSERT% V+ F; A' D$ s
7:C
  Y4 P9 v& a4 o: C" K1 S; Y7 g0 {  u8:A/ {0 y4 N; h9 @6 n4 B
9:C
5 u  b" W1 ~- k# t( C2 J9 J, W10:E; S! {+ z% C2 T; Q; a8 \
11:C# }& Z8 \& t+ {# V; {2 J
12:E7 y9 S3 \3 w! g4 }/ f- j6 `' @
13:BC
, w& b- S* F3 a6 e. z14:C6 U) `4 V/ O) k
15:事务
' X! H) |, P: ^8 k( L% |3 m- a) T% d1 d6 }
2 x7 p! L1 j0 h' R5 |
; \2 I. \8 p3 c$ r) J; W5 u
答案详解
* x( A) @& _+ S" f) Q$ `8 _2 P, o% k0 O0 N4 \& p
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。$ q) ]% O7 L7 @) I  y% C1 t2 W

$ x8 v$ c) f; j( r/ B) i) J2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。! @2 X5 L, k- l# o* [# g7 e! H
0 k2 j% a# S, W# g8 O; F
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。
' V1 K  i7 p2 O* E2 @& Z$ \/ O& n. f) K0 I4 Z; y: e
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。; r3 @" p" ?7 n  z
7 v" Y5 Q2 z. T, \
5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。
4 ~8 @4 E' J7 V4 k+ ^1 ?) E( T6 {" `: P' A0 f
6.答案显然是INSERT。
2 L$ L' I/ n# t6 A6 K
  k9 q% I5 S3 D& _5 R7 g* {" x7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。/ k5 a( ?9 |' C' V
1 ]! X) S9 E1 {/ z/ f- {
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。7 S" }/ z' U% t+ o# F: g5 E6 U7 J
! c7 q. m) g6 p1 T! g, b
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。8 k7 a: B( B7 w  J

; S$ e9 c6 ^3 S  g* V10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。' a- @* w. U2 W* F* [

7 K5 e9 R& C; Y% f11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
% l; R1 B1 ?' k3 Y, @
5 \3 v* }6 X! H! u3 z- `5 U" q12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。1 i* k! M! |6 ?( u( H

, k7 T7 ~; h4 a/ q+ v. N13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。/ {. D2 K$ }" ~( a5 C, j3 D

- d( v2 `  j, L" Z- t14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。
6 T. b7 V% E4 K$ d: H9 S9 `/ V: ^3 D5 k; A( N6 L4 N, c
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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