返回列表 发帖

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
/ G+ {0 H; A: `; PPHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
2 P3 D% s  |. ^. W本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。' T, `& b) A  a6 ^' x- ^6 ?) P- m

9 `) r# m, V# d4 q( e9 r0 X. K; [6 g- K2 }9 j& o! ~
问题' C& c& s0 q1 T  S* _
3 m- J3 x7 _# R3 s% ]8 a0 h( C
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)% g; n- u1 U6 ~$ g: r' k

8 a7 G9 A) {: pSELECT * FROM MY_TABLE1 q. i# J6 J7 Y# \5 y
; _* k( K  Z: [4 s
A.如果可能,用把查询转换成存储例程
3 \) i+ J2 q0 YB.如果程序允许,给查询指定返回记录的范围
& O) Z) I& _: `, H5 RC.如果可能,添加where条件4 {% ~) i/ G7 {+ t" d6 z) p) t
D.如果DBMS允许,把查询转换成视图
% w7 c- n, @. kE.如果DBMS允许,使用事先准备好的语句
; a1 ]" m" y" ]% d) m  `8 }5 Y! J

. A+ _; I& k$ v) h5 C2.可以用添加______条件的方式对查询返回的数据集进行过滤?' ]# X& F4 D( \% w7 E/ d. A  B
1 F2 N, S* C6 X: `
答案:____________0 o& A8 i. L3 m7 C) x0 l
( T2 _5 v) D. X
$ S( F& `3 ^8 Z2 D3 V; }
3.内关联(inner join)是用来做什么的?
* `4 K# E8 w. f/ n3 S' P4 F; ^, w4 S9 F4 i- w( f0 Y( V8 E
A.把两个表通过相同字段关联入一张持久的表中: {5 b. y0 K+ I7 E
B.创建基于两个表中相同相同行的结果集( C8 F6 P/ M% v& |
C.创建基于一个表中的记录的数据集
5 f/ @6 X9 }( F. @5 fD.创建一个包含两个表中相同记录和一个表中全部记录的结果集
! ~: u) i# i0 wE.以上都不对
2 D( \: l+ X& r8 w
# ]7 n$ }0 k* A
, S  g# V1 }. V; ?4.以下哪个DBMS没有PHP扩展库?1 H( K9 r0 k% b- ?% k; K

$ _. I: s( f* H# P! X0 ^8 B3 VA.MySQL: V! p2 `/ F5 g- A" M& ^5 a% ]
B.IBM DB/2$ [+ }$ X, y5 M* R) x" ^  j
C.PostgreSQL
$ G1 o: i8 Q5 L! g0 ~6 s  oD.Microsoft SQL Server- {  ~( v) |; R5 ~3 P5 d' L. i" r
E.以上都不对
/ @0 k% X- ~2 x7 M
% w9 M2 Q* ?( e( }0 m+ m  F' i- A8 M7 x% b& x
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
/ P9 x# U. b: N6 v! N
# L( e9 i( }! S4 f5 k: I<?php
5 U6 x4 V6 N% g( d4 e$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);/ _9 w, |' T8 a5 I& `
?>+ p9 q( f, A4 U6 u$ Q9 X- V, S
: T! b  o4 t+ N$ @5 Y5 [/ x
A.MYTABLE表中的记录超过1条
4 M8 }, C9 x8 d0 L0 D( wB.用户输入的数据需要经过适当的转义和过滤& c. Y. d2 q4 k9 f1 H" M1 j
C.调用该函数将产生一个包含了其他记录条数的记录
9 m0 `. o5 k; d5 |! F3 h' oD.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
' j1 q# q+ Z. B5 b* ?E.查询语句中应该包含数据库名
3 Z$ F; E& u8 u2 r; b: R7 H1 Q+ b+ q! R- a  G, b: K

9 L1 d+ Q' n  {. u# r6.______语句能用来向已存在的表中添加新的记录。
& k$ A7 K( o$ g/ x4 N/ _) f* X
' N9 U) p* r/ W- [答案:____________
/ h. u; t& F* I9 g& G, B' k1 _% ^9 @  s9 I- z) o- b: Y

/ ?1 ^1 ~8 n7 E- s: ^1 E1 i4 }7.以下哪个说法正确?/ a6 T* d6 L  A* d
0 O4 g6 D/ c( ^  x/ q" H9 O1 X2 Q
A.使用索引能加快插入数据的速度
2 f5 F& J" _( M1 k3 k- o+ K* t1 kB.良好的索引策略有助于防止跨站攻击
+ U, @- [6 _, {* S! [; `C.应当根据数据库的实际应用按理设计索引/ y# C6 p+ o4 s' I+ x
D.删除一条记录将导致整个表的索引被破坏9 V& {/ ]& r" Y! y0 O5 Y2 j
E.只有数字记录行需要索引4 c8 A. h0 \# }$ M2 a& W5 u2 Y3 S

, w. P$ k# k7 r' f; e3 N
% j, u% S5 P, W) _8.join能否被嵌套?. \+ i4 h$ v2 ^; I4 l0 ]9 x/ _

7 O  N9 x* m3 W3 U; I. WA.能! u3 c  M; A' ^. f. U  j! r8 M
B.不能  [1 O8 o: C. ?! w6 M. r

4 z& B. G8 A9 [
, ?) h+ a6 X% @5 @4 f  _% N9.考虑如下数据表和查询。如何添加索引能提高查询速度?
5 R4 n' o6 z7 r( s( c8 G$ f8 W9 z$ s' O
CREATE TABLE MYTABLE (
1 `/ y- f% T9 u5 qID INT,
3 A, H) C2 I" C5 U7 D( z' G. gNAME VARCHAR (100),3 k/ ?) U% M% A  X8 t) H
ADDRESS1 VARCHAR (100),
6 a& A. d9 O8 v' R  k, F3 r8 gADDRESS2 VARCHAR (100),
( _# }! {) E* H" r7 a/ t. P1 F9 rZIPCODE VARCHAR (10),
7 X' b; b: ~1 _. }" w0 K& vCITY VARCHAR (50),
2 ^- p' A9 n& J- q: X2 V+ ^+ r8 bPROVINCE VARCHAR (2)" g) C- P. p: E  O' c2 L
)
. Y- l& ~0 V2 M' t: H; oSELECT ID, VARCHAR
1 o" X5 b' I+ h: T0 G/ O& |. F2 dFROM MYTABLE2 o& E1 l& J7 W1 M2 N4 S6 M/ l
WHERE ID BETWEEN 0 AND 100
- q$ G8 Z/ m" s9 W' w4 e6 u) TORDER BY NAME, ZIPCODE0 G+ V2 L! X% z3 Q/ H

( F  t6 \/ I9 LA.给ID添加索引
& `! a9 m; A7 m/ T4 [B.给NAME和ADDRESS1添加索引
, e, j% e7 b# ^6 r$ J/ QC.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
9 V3 F3 }7 L- Z# R3 K! hD.给ZIPCODE和NAME添加索引; x% Q1 J- T6 X# f
E.给ZIPCODE添加全文检索: p$ w- u5 A* z& [* ?0 m
9 Q. x. }$ {4 s" o: Q
' V, H8 u6 |( M4 Q7 T, t6 b; t
10.执行以下SQL语句后将发生什么?
+ ~5 G4 Z1 S* ?1 @6 t* M! B! C
1 W+ H) T5 ?. L( ?0 i! W9 i/ X  I, l' Y& yBEGIN TRANSACTION
0 b2 y, v0 ~) C7 o/ UDELETE FROM MYTABLE WHERE ID=1
" [3 H2 S# l& S0 W* hDELETE FROM OTHERTABLE: Q# Z; b* F" Y3 _' n" j
ROLLBACK TRANSACTION' D) M, G/ b# C9 S0 P& }
% I, F) G0 D  E/ B+ R/ B
A.OTHERTABLE中的内容将被删除
9 S' i6 A. E5 \$ L; Z, KB.OTHERTABLE和MYTABLE中的内容都会被删除
6 t- o9 B. n! k3 ~C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除9 N3 J/ u1 ]* x) o3 l
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
5 w, K' W/ l) W+ k3 f! N& SE.数据库没用变化5 x/ n% _& x% [* P$ R" V3 v8 |
4 n0 R* c. m# D7 R& g& H' u7 K' k
2 t% J/ X' c( H9 x$ x* H, j
11.DESC在这个查询中起什么作用?9 P/ f6 ~* t- E7 @+ S
3 |3 `! i, l1 P+ W9 h1 y. j
SELECT *
1 J& S" d: k% n/ x* Q5 UFROM MY_TABLE
. f1 d; g9 \9 h; V# D% {3 a$ B- n. ~WHERE ID > 0  V  s4 q4 u# C4 v5 X1 Z8 f! M
ORDER BY ID, NAME DESC
! i1 O! F: R2 B4 [; o/ E5 E/ w- H" _4 T/ E2 d
A.返回的数据集倒序排列5 B/ h( W( G2 K1 ^/ I- K
B.ID相同的记录按NAME升序排列
9 b/ G3 e8 w) IC.ID相同的记录按NAME倒序排列+ z0 A. p+ Y. s" p/ \& y
D.返回的记录先按NAME排序,再安ID排序
  E5 H; X; {: Z! G9 H7 i/ S& L5 dE.结果集中包含对NAME字段的描述
9 ^1 n2 [% k% b7 m/ w, w1 x+ d2 q4 ^
; C2 j0 Q& j: k  h6 c+ P
12.以下哪个不是SQL函数?
! ]6 t0 T  r% V$ A3 [
* ^# i4 R4 O. gA.AVG: j; ^" ]5 \- `* i2 B* Q" ~/ O/ R
B.SUM2 C/ p7 ]2 l; ~/ z& N2 L( _
C.MIN9 O1 M' I9 ?  D; ^2 [
D.MAX, c4 _, g1 d4 r7 i$ ~; W
E.CURRENT_DATE()  q; S( x. A4 W# B" S
- x# U  U* F  N6 w$ s8 m# E# k" X" I

  K( X8 C% R4 I6 J! C13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
2 o* j. T7 {- r2 Q  i. @3 h+ n( b$ \! c' k4 \% q  x
A.该字段必须有索引" F6 O) [- |8 f
B.该字段必须包括在GROUP BY条件中
- G# X$ j, F3 D% }* v% L) [3 CC.该字段必须包含一个累积值
2 P( K$ [. B3 [) K. B' m1 Z( }1 b! W3 ED.该字段必须是主键
' b2 J1 I+ m, j/ x! ^) ]E.该字段必须不能包含NULL值* w+ }; Y- P, ]7 C) Y, Z
. V8 _0 P" M5 c  g  G0 ^9 A  R
3 N! Z5 O7 @1 b4 ~2 G9 _. c
14.以下查询输出什么?
0 ?2 N0 a2 u* i
9 y: F+ Q0 z/ H+ t# O. v2 oSELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2$ ^9 h7 \; n0 R4 e* L$ _/ Z
ON TABLE1.ID <> TABLE2.ID
3 r+ M! w. E) W
, j0 v2 w  y% @, G$ FA.TABLE1和TABLE2不相同的记录
" U. }6 m$ a- `9 D! A$ ?, SB.两个表中相同的记录
6 J8 Y! V' `  d3 OC.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数7 h( t9 f5 x; s0 y2 M& o: Q1 c
D.两表中不同记录的条数
. p' d5 U: ?1 Q% hE.数字2
: h+ E0 C$ D" w9 x) i0 u+ l& D, c7 q& V2 K: R) g: X

8 V, f" t7 S, @! Y- }5 b6 w15.______能保证一组SQL语句不受干扰的运行?
4 p0 D& d! G% g  ]' p8 G3 g9 `2 {3 c$ \) `* a* I; }* h5 r
答案:____________
! N, A9 B3 W# [3 M/ g' [# {- O  R- N- g. M1 D9 P6 a

. Q. U5 q5 M0 s' c1 y/ J! t1 ]  U/ B2 q; K. h  m# |
答案速查# o8 Z  T6 p  s2 O
1:BC( O' W; U, P! _
2:WHERE
! C$ D. T, E# M" m" c9 V4 l3:B+ d& t- R- E& Z* i
4:E
; R$ h. W2 Q; f3 i9 W# x5:BD
8 u3 b7 I$ i5 j: _5 {" K! U! v6:INSERT
0 }$ O9 V9 V1 g: h* u7 m4 M7:C3 O, R- b: y# }9 Q: X  {
8:A  o3 ]0 ^: x& Y. n) f6 A
9:C$ e' K5 ^0 ?* m: m
10:E+ S) r2 J- R0 q0 j. a
11:C  N4 r9 ~9 F! E- ^8 G: p
12:E
& l( Q* R( f+ |: ]/ q6 A9 |) W  x13:BC
- ^: m8 I5 |* `, `8 I14:C
: c9 q+ g4 s& {  `$ ?' [9 y( [5 H8 u15:事务* E. C. a4 `5 X8 _
  n% E% k% C5 T9 ^5 S: K, s

4 _. F& T; o  Z1 P9 b
! V) Q! |1 U  F( g答案详解
( C! \8 ^$ y# _, }* G! u, h4 d
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
' A: ?6 s# G. M4 {5 H3 ~' ^9 O, P: f; Y; h
2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。+ S! W3 f5 D( j+ Z
1 C( G8 x9 Q  u! y8 Z  }* W8 o0 y" l
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。1 Y+ |7 l( ~* Q* x* O
) p6 |8 k3 z3 i% s6 d
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。6 i/ v, j8 h$ j
5 E' F3 @. W$ g- x$ D
5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。  L0 P: ^# z& |$ Y) C, i' D. W
. D5 K7 t0 C( f- m7 f+ d. {
6.答案显然是INSERT。
* D( @, x/ p, m% c% }/ m3 Y2 {- h2 I: |
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。; M3 k8 S% [1 G0 ~8 U/ T7 P

! q( ]; Z4 W' ^8 p- j; D( M8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。, j- n; q# a/ K) @8 a

. g, R+ T. h9 m2 ]; a1 h, f9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。5 z+ }$ k/ }- C$ E
+ m  F6 h+ _# z8 f8 V3 ?
10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
& ~0 Y, _# J7 D! D  C1 b" O9 u( S; N5 F+ {/ `: m, M5 b
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。, |) w1 Q4 M- P3 w: R

' h7 G4 R! J. A; w" E  l12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
" o& w7 R3 m" f3 e8 z% r* o6 O
% L1 V% u8 {- P. F' ~13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
. O  W  {4 U, @4 j5 X( c6 b) P/ N
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。" W+ ?! ^7 J) l; ]$ |+ k% D/ t) W

" O3 o* ?% G- g15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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