返回列表 发帖

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。8 Z- D8 n$ q1 g% e) H
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
5 K# r+ H8 B1 c4 P& c本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
: X9 n3 Y) x  G  j; W
+ m* y7 {. y, C7 h/ \! {% A) |/ i: d$ I; K. z3 W/ C1 N
问题
8 c* _* ~0 V  h, R& w1 o/ l' [* D3 }- J* N# t, y
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)4 K, E0 N' j% Q) c' L
0 ]8 S7 d9 P) V1 F6 k3 w( X
SELECT * FROM MY_TABLE$ L' w1 X' ^/ W9 o: I5 e

/ h0 k+ d# V7 k0 c4 |% s6 V" n! fA.如果可能,用把查询转换成存储例程5 n% }- j: @; f
B.如果程序允许,给查询指定返回记录的范围
0 _/ K7 u: h0 _3 qC.如果可能,添加where条件3 r' K5 d2 r& y1 Y( d
D.如果DBMS允许,把查询转换成视图
: U4 x5 g# U) E; cE.如果DBMS允许,使用事先准备好的语句, v  @8 \5 x& k' K
4 T' i) j8 W* {* |7 U( w) B" X: u

' j+ O5 ]6 O% ?2.可以用添加______条件的方式对查询返回的数据集进行过滤?3 R! i0 [- J$ n
: r' R- C+ l5 Q3 Q
答案:____________
  A* [' ]2 |4 Q3 r8 B: S4 j" S5 P6 S" e
" A" I" d" x. k) T) W$ h
3.内关联(inner join)是用来做什么的?+ H* M5 m/ s, N' M# _" {+ Q4 Z
8 D& o& r& O% R& c! W9 q- h/ `
A.把两个表通过相同字段关联入一张持久的表中6 [3 [: M( F- x4 x& H, ~
B.创建基于两个表中相同相同行的结果集
4 \, S6 g; Y. ?2 p! J- lC.创建基于一个表中的记录的数据集( b! X5 c8 _1 T! Z; v' k
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集
+ z% N" \# f% |/ n. M/ ~9 VE.以上都不对1 L. a# L- A3 v+ B  L+ B6 Q

0 y1 B- f! I0 U1 g4 Z- z" B) [0 \; O" s5 f& {) |3 o+ ~! a
4.以下哪个DBMS没有PHP扩展库?
) K; m2 B& [2 [' N! g4 b3 L  A/ Y0 z* d, W# I
A.MySQL
- v# A3 C3 Y- b' y. I; ^B.IBM DB/2
: N9 g6 z& F, @, s  `2 RC.PostgreSQL
3 V  w3 H3 `9 }. F4 s# zD.Microsoft SQL Server
! l; e& S0 S- L! nE.以上都不对% \$ b( q" ~1 e/ ]$ E' C. l* ]' X

; {& {! H$ u8 W8 A, S9 U" q7 S- g; }4 l2 R: F8 N
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)8 |8 R& `( X7 f$ X) d; E1 r. P8 U+ B

' }, i. {+ J5 G% ?- O, L- M3 U<?php
* P; d8 P# ]( r5 Y9 G$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);( w: L( R$ s$ W  k: N% c
?>- \( Q; o1 F/ ]$ a" x$ @
& t' }. H# M# w  e) E  u$ m
A.MYTABLE表中的记录超过1条6 t* \, Q& \5 l5 ~8 j& t- \
B.用户输入的数据需要经过适当的转义和过滤
9 M0 X8 D  y6 Q# z; e9 pC.调用该函数将产生一个包含了其他记录条数的记录1 [& a# S, }- V  }
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除. ^1 \8 O  S7 \4 W
E.查询语句中应该包含数据库名
# \, E' u4 ]/ S' D. U+ ?+ u8 s8 t# n) J9 C, E8 ]

/ z' d" K+ Y9 g, [9 x6.______语句能用来向已存在的表中添加新的记录。2 l3 V0 g: x: M, a2 M! F/ f7 k
) K' F0 G7 Q, z, ~- Y; v
答案:____________# U# S9 |& \5 ^, Q6 ^# a4 q

) Y7 t1 V2 j0 z- k( g9 N9 B! q. [, y9 @* W; Y% F( @& {# V6 |
7.以下哪个说法正确?; `3 O! ^0 d9 `

- M) C" ?1 R2 p' \- cA.使用索引能加快插入数据的速度
8 R# k) }4 Z" G; V$ h( ^5 oB.良好的索引策略有助于防止跨站攻击
: d4 n) E8 G% K. ^  o  t9 ~& QC.应当根据数据库的实际应用按理设计索引
/ d# {" n" {( N5 [& P; XD.删除一条记录将导致整个表的索引被破坏( Q; O5 J8 i/ R
E.只有数字记录行需要索引5 {& b& S' d0 g" r2 e
0 C. ^; C8 E4 k! `

# ]' h# K" x& }& k8.join能否被嵌套?2 R( I* y6 \0 f9 L3 W0 b3 s  M8 Q
' F. C+ ^( G( k+ g. Z
A.能4 s( L0 t9 S6 i3 z
B.不能4 \) b+ q/ d; W

. N$ }# u; _! F* M2 G: P! V6 i- `3 d. i# @3 O; Z
9.考虑如下数据表和查询。如何添加索引能提高查询速度?
5 U& ^, [$ d' d3 [) x- G
$ k0 O/ x4 ?& E- l  c" }CREATE TABLE MYTABLE (
: A' W: F" o' B: ^3 m, j8 `- a* VID INT,
; C3 q3 X6 p6 y  E- j! P& MNAME VARCHAR (100),
4 [* {+ u1 X2 I: CADDRESS1 VARCHAR (100),2 R. V% p& c5 d# _* R  H/ V9 h
ADDRESS2 VARCHAR (100),
+ C$ h) G0 T! w* ^ZIPCODE VARCHAR (10),  h6 |3 U, \7 `/ ]! e, N$ I: Z) U
CITY VARCHAR (50),
9 G* e5 }  B# G* B6 U& lPROVINCE VARCHAR (2)
1 n: {# N0 W% _3 K$ y. T)' a( {+ [( m9 z% P! v$ {- N0 k
SELECT ID, VARCHAR
/ d# e# P1 O# S/ y/ j. O! vFROM MYTABLE
. B# l) Q, v0 s  FWHERE ID BETWEEN 0 AND 1007 k; l# S) o7 U8 G9 {
ORDER BY NAME, ZIPCODE
1 Z* O9 I/ L0 j# n- a$ U* f7 w; |! |# }' z/ z& t
A.给ID添加索引
. _! Z. t: M& X' |B.给NAME和ADDRESS1添加索引6 M9 ]5 M1 h6 H; ]
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引( l& O1 _. b) ^  n9 J8 o. ~; g
D.给ZIPCODE和NAME添加索引
! q1 y, a3 y" Q# p/ L! F+ sE.给ZIPCODE添加全文检索8 S4 o9 g+ N, Q2 \2 ?

, f  U# P2 n* i1 {/ K; c" l* j9 B7 q, s* g% v
10.执行以下SQL语句后将发生什么?2 a8 u! R: ^* E2 {
! y, g' _3 e( W) x! m$ Q* _
BEGIN TRANSACTION- h/ U! v% h: m# m5 U
DELETE FROM MYTABLE WHERE ID=15 j+ d  U& @5 y; c6 H
DELETE FROM OTHERTABLE
* a; k& P; J& L8 y5 R, X" AROLLBACK TRANSACTION# r: y" ^; d  G7 H9 `, g* \; M$ t
$ G0 v* \& `( |* B- ^
A.OTHERTABLE中的内容将被删除
% _7 l8 Q* a6 y3 e# Z5 U' ?B.OTHERTABLE和MYTABLE中的内容都会被删除
" l' g; x/ A) D* R  j' J! k  NC.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除: j- @- [) V( \2 u; ]2 G* E
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化% ?( P% S2 V8 ]2 c' j! n
E.数据库没用变化
% h" [" E- }2 ], Z( `- r- [& P) a3 E+ K0 ]% t, L( O% {/ F
* O7 J0 h2 W+ L0 g
11.DESC在这个查询中起什么作用?+ a# j8 G  S1 @. B1 y, ~

7 Z2 }, t6 k. L: r( |, M1 GSELECT */ Z( ~9 h5 Q# E
FROM MY_TABLE0 F/ A) L4 ]9 {- \4 C3 L
WHERE ID > 0
) Y3 j4 M8 o4 R# A5 l  q1 ?3 \ORDER BY ID, NAME DESC! x# T1 v7 ^: K* G) R" T3 O: F

0 x! Z4 |% B2 ^' E. h; T5 r1 H1 L" YA.返回的数据集倒序排列
0 s  E4 C  Y3 x1 o2 KB.ID相同的记录按NAME升序排列
3 Q. K0 }) c: s- a  P3 `C.ID相同的记录按NAME倒序排列
% [. |3 V$ Y  `* B$ aD.返回的记录先按NAME排序,再安ID排序
* `6 {, E. k5 k) S, y2 t" h  gE.结果集中包含对NAME字段的描述
3 B# y+ p- P9 i1 P& b- B
5 O7 X$ J4 ]" b8 j
4 j, i( e9 E5 Z8 c2 S3 t12.以下哪个不是SQL函数?
# w; h$ ^! ]) ~: W% O+ l
! O' Y; Q) C- v8 a( m% g% SA.AVG) s7 X3 U$ |! N# e! P$ \
B.SUM3 B2 G/ A" v" q( P0 P: O* m; h
C.MIN
# W4 ?! z8 n0 N; @& R7 ^  w' W& ]! S) [D.MAX0 P- j. J" }6 [
E.CURRENT_DATE()
' s; I9 W5 p3 l* Y* G' ^- E8 j- ?6 E/ u" G

/ E. D' O! b6 k$ u' T( q( g. l13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
3 `) M9 T8 W/ [5 J
- A- v. o* t" }" V) S: r1 z7 k  C" y# vA.该字段必须有索引& S) o' b$ t6 p" Q: q- }
B.该字段必须包括在GROUP BY条件中
! h# q, I9 a8 qC.该字段必须包含一个累积值+ j9 y+ D* Q& n  p; X8 p% o
D.该字段必须是主键( B1 g3 d% L  L
E.该字段必须不能包含NULL值4 c, F& @# }3 c4 G" Z) g

- q. u! V6 X/ G
: K! P3 T- V/ |' R- b/ q# \14.以下查询输出什么?
; d/ G7 n. ?, V/ k4 ]. D
- X% L) a: d# Y, n: N+ m0 uSELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
- x- Y& L4 s" O6 u# Z8 SON TABLE1.ID <> TABLE2.ID/ w# y; F+ ?/ q' X6 k% q

  \7 o" E+ L; i" fA.TABLE1和TABLE2不相同的记录
# a, ~% C6 Z2 ~" M- EB.两个表中相同的记录
1 F( _5 Z3 D5 ~C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
; T  ~; R) a- X: V5 T# XD.两表中不同记录的条数- R6 H8 u3 m# \' y; A5 b0 j
E.数字2$ G! X' k  {' k/ I) w; \0 Z" u1 d
+ j, C1 G7 @- o0 {1 n

9 v( P/ h2 y) P, D, z$ b15.______能保证一组SQL语句不受干扰的运行?
4 S4 q6 ?& a) \3 m  _5 L9 m
- j7 m5 i" h" q& _7 _2 \答案:____________# U' U1 G8 d$ F/ R7 {) K" E4 S5 V
! M3 q+ V& O% H6 ?' v) y
- U- o& y, Z* v# G5 _& o

1 E$ a$ I% t# m6 a答案速查
+ Q5 `0 L/ D. i' h2 C) L) W1:BC9 n) H' ~; x: [) b2 ^
2:WHERE
' W/ o( s) g+ g& P1 r% k: Z3:B/ k) y0 o+ ^( b
4:E; q' p# l  x+ l& a3 Z2 u
5:BD" Y) @, C  ~) m2 @
6:INSERT% K: e# t& n9 f; D" g# `) W
7:C
0 d4 x) j0 E/ a1 N) C8:A
+ X1 ?# C' C8 ~( h, Y5 p: J5 [2 L% G9:C
& f6 q9 ?+ |9 [6 q% N+ r1 I4 [- F10:E, `% M0 O- ^' ~' [; `. i
11:C# p9 X. U6 A# j- V2 I& Z
12:E
' q9 S# r5 r$ K7 [. B3 O6 w& V2 ~13:BC
$ G' K/ k. s. O' [, |3 ?14:C
; z5 k+ _* F4 B2 p/ N( C4 X5 Q! E) q15:事务* n  |4 k* s4 h1 z/ U! J) e

0 O  {8 T1 M* d: h0 f! l6 ]9 @$ l! I9 w% j9 Q& z% a

9 n4 c4 l7 x& V2 F# K答案详解0 v0 U: x4 D* G6 g$ g
+ u: o6 @) y2 B+ t: m' X
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
! u4 @2 q  z( s' k; P6 s; {1 M, K5 Y- y; T0 v
2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。3 \; d* L" N  c! `

3 `: B! f! X" G& j# F3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。
! A* b) d" U1 X1 i  f: W2 I8 }- g: g6 G
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。/ x: u: I$ s7 a- q

* j# ~- [/ b' G) B- @. M; y5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。7 v% g! {# ?5 {2 x

' a9 a  g8 l; S1 l% F3 i5 I# V# ]) W6.答案显然是INSERT。9 [' o5 p4 ~/ D' l% u
2 _3 l7 H8 L( p. X
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
7 n6 Y! _6 \$ h3 J! F
9 B$ D2 a! R1 @& D8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。0 R; z5 A6 S' R' H- G- d, S6 N( Y
7 T/ [# K# A" K: N5 `3 ?8 h
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
( @' I# C4 J7 ?% t, ^/ @( B2 w5 A. @" w
10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。% Y) v) B7 h  n+ `( X- \
9 [! M: l( N! C
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
" u; a/ m$ P  _$ V
3 t7 ^& C# ?9 \: {( ~12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。8 e# p+ |1 t+ ]& M( l; g* r" k

  P* v; W5 _  g3 P& v. V13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
. i8 y1 @7 K3 w' a2 }' k
% y9 {6 ^* a  D* g2 \- M( ]14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。
3 J) T) `+ J6 N5 K8 c4 z6 k) X+ U+ n" l9 P
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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