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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。$ R# s/ g3 P: X
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
( a0 g) l5 W  l9 H, Y" u% u( }/ I本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
' i% L9 c. U: E) |/ W/ }# E5 W# c; p* a+ D6 \  y+ q; O0 t

0 p, z( ]+ ~+ K; w问题6 o2 c0 O/ i$ ]# z

9 U$ E. h! f+ U( W% a1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)
* e# ?" t; ~' t6 w2 J0 T0 Y5 I0 w
6 L9 A+ I9 {9 [1 Q. h& z" T0 Y- u' DSELECT * FROM MY_TABLE
* @3 H" l2 i- I
' d  o% W4 k- d/ [A.如果可能,用把查询转换成存储例程9 C/ c+ M; a1 M1 R4 k$ Y& q
B.如果程序允许,给查询指定返回记录的范围
; y" U1 T9 g- f" _) kC.如果可能,添加where条件! b. R8 W* K0 u' d* }
D.如果DBMS允许,把查询转换成视图3 m  R7 q! }/ V7 Y" g
E.如果DBMS允许,使用事先准备好的语句9 E+ S1 C- x$ Z! g+ _
( d7 ~$ x/ y, ]5 e* h/ d
9 u9 t/ k& l2 C4 ]# @1 V
2.可以用添加______条件的方式对查询返回的数据集进行过滤?
) F8 F' B9 [' u4 R6 c  q+ X* ~& d7 U' y8 p0 d* l1 E' n
答案:____________
* N7 N& C' q) F$ ^& e/ y+ E" o
$ J2 e* t0 M: v, V: J6 {( t  R- r; [! D+ |$ C
3.内关联(inner join)是用来做什么的?! a* _/ u( z* j! D

2 O$ X5 s- ~3 CA.把两个表通过相同字段关联入一张持久的表中
0 g" w6 W9 i1 r& N: h% DB.创建基于两个表中相同相同行的结果集
% G6 \: d, r% J  N7 J' V, VC.创建基于一个表中的记录的数据集
7 y! w4 Y; r. v% I$ GD.创建一个包含两个表中相同记录和一个表中全部记录的结果集
! Z, y8 Y1 n2 ?: G7 xE.以上都不对
; a. m  I/ v5 Q$ q* M; O$ A- J& J$ `& N5 a
3 R/ e0 I4 R2 \: S
4.以下哪个DBMS没有PHP扩展库?
/ D1 l; s# c9 _$ m' v8 x  N1 R0 Z. h, g+ `' a& |% e
A.MySQL
+ {# u! E/ y& l+ e- L8 G, |B.IBM DB/2  q: t" v4 x% k) c
C.PostgreSQL+ P( t7 [# f) z# ?
D.Microsoft SQL Server
0 t7 K% X# w& FE.以上都不对% [( \4 e6 M1 ]9 t
5 |% f9 k6 v  f8 q

% ~( G, B# R3 |4 a- h5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)! e8 T# J5 G& p6 n# r! K$ ~
4 G8 r; _0 ?& K5 f% v, S! P  K
<?php' F5 r5 i! K0 q
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
: }1 n  f: [% E3 Q8 }! [: B, L?>% m# E0 m7 T/ I7 B/ S$ Q, p

# J2 ^) m' d1 n$ B8 }A.MYTABLE表中的记录超过1条4 W- D$ u1 q! S
B.用户输入的数据需要经过适当的转义和过滤
! x2 m. T6 a! U5 c2 oC.调用该函数将产生一个包含了其他记录条数的记录/ J$ H: ~$ a5 }3 [6 Y/ p
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
& A" y" Y( Q( M9 e5 i* aE.查询语句中应该包含数据库名
$ Y/ H; s% x- @# N& |/ k/ C
0 R) P" A7 `( K; g$ x# T! o9 o
" Y/ F4 B( [7 [) v6.______语句能用来向已存在的表中添加新的记录。
2 P# v. ]! [7 ?. h# H! C: W& G% z. z7 K  `) y/ d
答案:____________
5 n) z7 x# V3 ~, M" Z6 v/ j9 F7 G, U) Z7 W! [  _4 H) Y
8 X: o4 b* @% A
7.以下哪个说法正确?
& }; C0 l7 m# A$ i, z
1 r! U" Z* |# g/ v6 t+ m7 |6 LA.使用索引能加快插入数据的速度
; q$ R- g! D, f* u8 }3 U7 c) RB.良好的索引策略有助于防止跨站攻击
' i* {, E- F; F8 I* x/ zC.应当根据数据库的实际应用按理设计索引
; U* x$ k- C# Y# a+ AD.删除一条记录将导致整个表的索引被破坏
" C8 {1 d3 o# a3 o2 GE.只有数字记录行需要索引4 r9 M" `& b$ ]$ z9 O6 w

' j; L. _9 M. X6 C) C6 B  U
' x7 _. B, y& q7 B: x8.join能否被嵌套?
) W) r; G% T3 m, k  w% w
) b1 G& G  \1 T; ^, _4 SA.能
- R2 g* U5 u4 f' q1 s# e" zB.不能
( ^# [0 @/ Z+ ^% `9 }! h4 [
- B3 R2 g0 M6 z/ Z! ?6 r
/ A* g/ R# }: t' ^9.考虑如下数据表和查询。如何添加索引能提高查询速度?
. ?- `/ [7 {  u" A- H$ Y7 s  x  ?: H/ o0 m/ _$ c( a! `
CREATE TABLE MYTABLE (+ x$ M. g) r/ {0 D+ \; ^$ g
ID INT,
/ Q3 [  f6 F& s8 ?% \7 N. K) J8 WNAME VARCHAR (100),
$ F) f# _9 e! ]: xADDRESS1 VARCHAR (100),6 S* }) E7 ~" V5 g$ M) I
ADDRESS2 VARCHAR (100),
1 _  L, N1 n. R5 g0 ^  `# e* WZIPCODE VARCHAR (10),, U0 ^$ E: F  M0 ^. |6 S
CITY VARCHAR (50),
0 g) T: ~1 F& }/ ]PROVINCE VARCHAR (2)2 F9 z1 @# M% {' g5 L
)- T& U' V, z! \) B4 n. J
SELECT ID, VARCHAR4 C' S( v+ o7 {0 o  K
FROM MYTABLE
3 ^( v/ N4 H2 bWHERE ID BETWEEN 0 AND 100
% M& w/ b5 `- ^ORDER BY NAME, ZIPCODE
. d; x7 E" L$ H) p) Y( h8 l0 j0 d
- t# F" [, R0 T* o$ ~A.给ID添加索引
- z) o' a% L, ]$ `B.给NAME和ADDRESS1添加索引# O: L- ^* s0 V9 v1 z  ~- B9 I8 |
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引5 X2 @  O* G2 h2 i$ t
D.给ZIPCODE和NAME添加索引
$ l( {. M* _% K$ h" SE.给ZIPCODE添加全文检索% S+ l' g, L/ f3 j6 L& a  Q2 X

$ V) q- X/ `4 {- Y1 V% [3 R1 W$ |( w5 E
10.执行以下SQL语句后将发生什么?
" K8 V5 r8 {( k6 _. l' f5 h/ i" u4 c1 t& c1 P% A
BEGIN TRANSACTION
% R7 T( L% T7 k( X9 C! D% BDELETE FROM MYTABLE WHERE ID=1
2 |/ d  c$ G, |4 CDELETE FROM OTHERTABLE% S9 G! i8 Z( {, s0 m
ROLLBACK TRANSACTION
* R5 ~2 p/ ^- s8 d7 D8 x
( {* \, S$ X2 I1 l3 H; W( OA.OTHERTABLE中的内容将被删除
# \# d7 k; x; Q! G6 y- e  z/ aB.OTHERTABLE和MYTABLE中的内容都会被删除
) q: t( @  m! K& j) {3 \! bC.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
$ I. q, u; Y4 o0 x& r/ S/ bD.数据库对于执行这个语句的用户以外的起来用户来说,没有变化- [2 m8 Z; z. s
E.数据库没用变化6 a" R+ C& Z2 \& b6 _2 {

- m3 w8 \# }$ R  S: b2 I) C7 A2 Y$ W" S5 \! Y: t# L+ A4 n6 w- G
11.DESC在这个查询中起什么作用?( Q& q% _- \: X. t
  @9 W6 V$ B" [3 N: `
SELECT *
3 m8 N$ R) c* o2 y8 aFROM MY_TABLE
7 }, c; J* \, j+ Y0 @7 `' TWHERE ID > 0" s  U2 o1 K* x1 w& y. c+ d
ORDER BY ID, NAME DESC. j! {7 c+ |5 r: `9 G' w4 {% a
7 v9 h# v/ T4 O$ q
A.返回的数据集倒序排列# m8 c  g& j  q9 u
B.ID相同的记录按NAME升序排列* @9 A  V/ R- i0 W6 K: S/ p
C.ID相同的记录按NAME倒序排列
( Z7 b' Z( L8 \/ d/ q% FD.返回的记录先按NAME排序,再安ID排序, Q9 U7 A; \* H" C# y
E.结果集中包含对NAME字段的描述
2 {5 L8 h- b& q% F% l
. N( ~1 |+ s5 q" j) Q1 Q1 y
  H' S# P* Z1 Y; l12.以下哪个不是SQL函数?: o3 @1 o  M$ z0 r
* B/ l: D" M" a( ?+ ?
A.AVG( `- {0 N4 N, v9 Q; x
B.SUM
3 J3 ~& f/ u4 e7 l- cC.MIN/ M) Y9 _. D4 p6 E2 X
D.MAX. c  m+ b) }; |7 Y2 K9 J( I
E.CURRENT_DATE()2 V/ b5 m- t' `% U' U
4 p* w7 E# e; K7 T6 D0 Z  u* A
. X' L7 h  o5 t# L4 C
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
4 b  ?( Z8 M& w( o" ^4 h
3 y- c& P# Y! j' }& IA.该字段必须有索引
$ z" e7 u' m* U- ]' c! _B.该字段必须包括在GROUP BY条件中
5 i4 u2 z% c  lC.该字段必须包含一个累积值$ M0 K7 I; C+ l4 @- S
D.该字段必须是主键( Q3 y+ o; ?' P
E.该字段必须不能包含NULL值/ g! Z" Q9 i3 r2 E: p; c0 x' v* h1 _
' t( k" S7 A3 ^+ i! a" p
- b" a" u9 y. F. n# n- b4 |3 k
14.以下查询输出什么?6 t. K" P  f/ f. ?" b
/ h$ a7 T: b" @
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
  w# h$ ]. c( c' l( t- y# m% DON TABLE1.ID <> TABLE2.ID
  P) e1 S- F  O2 Y% Z% q
; L, U) O  @9 ~1 y+ o, X1 K( bA.TABLE1和TABLE2不相同的记录. H$ W. [5 t* Q% u# Q
B.两个表中相同的记录9 V! ^' K( ^/ A  L4 ]2 ^
C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
- u0 Q6 `7 ~, Q; b  B& y7 OD.两表中不同记录的条数
& @7 _' T- w! bE.数字2- V& N# I0 R4 Z
2 Q9 M" _9 ^) s# c
  h* Y- U9 N* V6 u3 x, e
15.______能保证一组SQL语句不受干扰的运行?+ w4 @. A, S3 d# V: I- Q5 o6 l3 ?
. M2 U- r$ L9 R2 ~! L# \
答案:____________5 J8 T3 f% M: R" n1 X

' [6 v$ k% B& M, a* B* Q6 M$ X8 }4 X2 e1 r2 f, y
+ E$ P- {' N9 G2 o% K  b
答案速查6 L! o6 A# L' A$ d. B/ H
1:BC
" q' O0 f) T$ W. i8 O; U8 }2:WHERE8 p; @" D$ L& i
3:B: g# [' Q# L- j$ _3 y- I
4:E
/ u: J3 |/ i' ^5:BD
) U+ b1 c# p% V; _6:INSERT2 s1 W; r# M/ E1 |7 o" A" z
7:C& o: e& y9 e* s  }. }. v- T' t. Y
8:A
. A$ |( |% I0 O2 d9:C6 n6 y' L8 X, h$ a
10:E
/ ]# a4 j( C( R* }3 `0 h11:C
4 f$ ?# S: D* N' w2 T12:E4 S- b2 d/ s# D
13:BC
3 m9 C- b$ M3 i8 i, ]* Y14:C
# g# V; W; G/ y$ C15:事务, M2 K: z4 r7 G, e3 D# F2 D) a; P
! G8 t5 {, E& R

, Y7 T. W' {  A, t5 k0 k  q/ \. I% g- X; U2 V% b
答案详解
/ n+ p, }$ H0 \' g) _1 S- }4 `6 ]" y/ ^: E1 K# X
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。6 c# c" P& V5 x7 P9 B0 n

; p8 }1 |* g  c# l1 E. J% Y1 E2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
3 e* W* ~' |$ n2 R# n% N* f4 x7 \  H- D7 B6 M1 O1 S
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。
& k- L7 y- J8 x
" }8 T& v; O, p% P9 F4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
; W5 m/ j! K# c5 @6 b, Z1 b- d% r
2 y) X4 g# ^4 V1 u4 P; K% a5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。* S! ]: Q$ [" q$ y0 V0 l, e6 v
% t& J8 q6 _8 Z% T. v8 F
6.答案显然是INSERT。
7 |' x; K# l. `/ ~
0 I! j- A# z1 A$ t- {7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。! U+ \& r; }, y' w% N. I% o# i2 h

) y2 j% B; B6 ~& W8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
5 f' y# M4 \' U  B1 Q5 G
' M" _# ?' Y" M9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
2 n. z- ?4 i0 I; G: h7 T: e, _" p* r: G8 z9 F% s
10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。  T" r* ?+ y. T- `& C5 e$ ^1 d
" B, \" p, Y' l) e# S2 A
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
, ?& w' z# G+ c/ z( E% }2 o
6 B  b( A) C# V12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。8 E% M7 B$ C0 @/ [
8 f9 J2 Z! q0 R- z% E$ U
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。8 ^* s. a! W# O! Q

2 j7 O- F. ]4 ?* a; b14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。
2 W8 ^- H3 N8 U* H+ a! Y( w% Q; W# A
3 T( v. U' e* m# T15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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