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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
, t1 _& ^, R, p9 i! DPHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
2 ]$ G9 e1 {# s2 T本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
- O8 Q* \/ i( D+ p
* r- d: Y* n# c7 h- h$ G4 O: H, l" v( Z1 o, u0 e' v# p
问题
, o9 ^/ }0 _. o& f# s3 _; D; s7 y5 M& w2 C; L
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)% h+ s- O  j5 w2 d9 ~) `9 `* G
9 m- Y7 M% ]* Q4 i' B
SELECT * FROM MY_TABLE
% |7 n1 r! A$ u& [
$ @$ k0 b( }( L- H/ EA.如果可能,用把查询转换成存储例程
, B0 f2 }( F9 A9 SB.如果程序允许,给查询指定返回记录的范围' s& D0 s, V+ s! E# Q% G$ }
C.如果可能,添加where条件! w) q! _( \- G; E: ^
D.如果DBMS允许,把查询转换成视图- Q: V. N  T# R4 Y; I
E.如果DBMS允许,使用事先准备好的语句
3 x2 Z2 G+ x3 x6 I6 n
8 ?4 W2 \) W. @9 X! b" e: _
& X! y2 E/ L/ y# F# Q2.可以用添加______条件的方式对查询返回的数据集进行过滤?
+ v2 P6 C5 n% {) d1 \
; F4 \7 p* w( f; l$ b答案:____________7 w' N- N" m. h0 n: p/ d3 n8 Z$ ~! ]9 M
' S4 A: n; H0 q) n; s

( W0 x4 r/ I1 M: y3 n( N; R3.内关联(inner join)是用来做什么的?
6 F, Z5 }+ E+ ^8 N+ w7 p" G+ z( [
) {9 E* \) N. X) g! DA.把两个表通过相同字段关联入一张持久的表中5 W! ~& e* f) w! U
B.创建基于两个表中相同相同行的结果集
8 o3 O/ s. r% v& zC.创建基于一个表中的记录的数据集* x$ h8 R4 m; u( r# @
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集) a5 O, I1 V! j: F8 v' g
E.以上都不对
# a/ `1 X8 p4 n7 O7 u5 m/ r7 ]# ~0 W/ \
& z  B8 \7 _: _: ^
4.以下哪个DBMS没有PHP扩展库?* F, E; v- l( Q( V) z2 p, H

" I+ |4 E# c* T! y9 r0 UA.MySQL+ i% K4 ?; _3 N9 z2 g7 R
B.IBM DB/2# ?% U' I1 m  I$ a
C.PostgreSQL
) Y) N7 K8 @2 r6 H# w+ U) p# ~& |D.Microsoft SQL Server7 b* m8 N1 I6 Y8 g* Y: u
E.以上都不对% O& M; P* W+ g5 Q. `
5 o3 D7 s  |0 l

4 {% x. C/ W( s+ `6 O5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)) t( S. U/ q  p6 M4 ~
9 d' B- [6 C! w% B( A! w
<?php
: r  S; B5 p! A* X7 h$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);" Y$ j. N' C- w( c8 O
?>
7 U. ]3 d% M! @
% \7 ~4 Y! P% J1 KA.MYTABLE表中的记录超过1条. p. X+ o& _( G8 a; n8 r
B.用户输入的数据需要经过适当的转义和过滤, b# M9 j6 r! m) X
C.调用该函数将产生一个包含了其他记录条数的记录
: o3 D/ p+ Y+ v6 [D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除  I. f4 _( v) W" e
E.查询语句中应该包含数据库名
6 c: o# K$ x1 z. ?; G2 l6 e1 h# [9 C0 p
6 O) S; [) O: w# c
6.______语句能用来向已存在的表中添加新的记录。
, U5 S" M+ P2 o3 [4 o
& _" W% \9 W% B0 }3 R( V答案:____________
$ c& V: V$ l9 |! ~6 {; \* B* s5 f3 O1 U

1 N' n+ u" \$ u5 }7.以下哪个说法正确?) }7 S% |6 d& }

5 x! @! J  p2 m( g) OA.使用索引能加快插入数据的速度( z: ]: B6 y$ `  I) e9 M' ?8 X
B.良好的索引策略有助于防止跨站攻击
$ o( |) ^+ x, L  x, P9 Y& {C.应当根据数据库的实际应用按理设计索引0 |( B" }1 [" E3 i, L* x$ i1 H- G% d
D.删除一条记录将导致整个表的索引被破坏
: L- u. ~6 m; nE.只有数字记录行需要索引: z+ z& X4 e2 t; Y
$ U  y8 Z; a% ?; J* T0 X: `

0 ~* x/ c4 _/ }3 c. c6 X$ k) r: G8.join能否被嵌套?- i& ^2 J( ~, q9 R  [: K

9 M% y2 P1 r3 @A.能* I( m" ?" h# U- w
B.不能. P' q* v" d* p/ b2 j0 P, y
0 a+ J9 Z' ~9 Z0 V
- d8 w& \; ]/ B
9.考虑如下数据表和查询。如何添加索引能提高查询速度?( w6 K) T3 M) l% a. L

0 h* `" R# P2 N9 S, ~8 pCREATE TABLE MYTABLE (
: X% U" c& \; x! ~' ^# Z$ gID INT,
$ ^& A' J7 U* z* A! K8 t7 DNAME VARCHAR (100),( d& M, V% c* u  q" _
ADDRESS1 VARCHAR (100),+ r5 v+ F. T4 t
ADDRESS2 VARCHAR (100),5 g3 b1 q/ O( U. U/ d
ZIPCODE VARCHAR (10),, Z% Z; q- x8 q8 U8 ^4 W8 a, R
CITY VARCHAR (50),6 h, I& A2 T1 I; z- K) X
PROVINCE VARCHAR (2)
0 E' j  M# I7 E+ })
/ R! t% J0 n6 bSELECT ID, VARCHAR% _# h5 v6 E$ i+ H6 U/ Y
FROM MYTABLE2 J$ \; P+ F6 q6 @
WHERE ID BETWEEN 0 AND 100
1 W9 Q0 s6 I  Q+ W) pORDER BY NAME, ZIPCODE6 r* A9 I% P& O& M  v" \

3 J; q( }0 O% p4 A# {% c5 OA.给ID添加索引8 q4 x8 n! z( b+ k
B.给NAME和ADDRESS1添加索引
5 c4 Z7 D! a  yC.给ID添加索引,然后给NAME和ZIPCODE分别添加索引- ]: n1 b$ `( M1 i& K$ m
D.给ZIPCODE和NAME添加索引
2 b2 `4 {, Z3 a# L1 bE.给ZIPCODE添加全文检索
- i" X  n& [% W% v" x
& e: _, o) s0 S- q5 O; R9 @5 _, V$ t9 y4 f# y3 A( c
10.执行以下SQL语句后将发生什么?
6 J: w7 e0 Z# p6 H: E' i4 q( u. |8 C5 g+ ?  h% y( ]
BEGIN TRANSACTION
* U% ~- B1 S& N# }DELETE FROM MYTABLE WHERE ID=1) b0 M$ J, A7 j' `; R, ~9 |/ ~
DELETE FROM OTHERTABLE% a1 ?# q  n3 L3 N. I9 T5 u9 i" J
ROLLBACK TRANSACTION) e. _7 _, ?( r
" C% w5 O8 q0 e
A.OTHERTABLE中的内容将被删除* v5 w: p. x5 j
B.OTHERTABLE和MYTABLE中的内容都会被删除# t) i# _  U2 G) H& N
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除9 v8 a4 Q; l9 ]0 Q5 D
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
0 L& l1 i  O4 T0 d5 G* C) sE.数据库没用变化
9 {/ }2 H3 i  _% ^
, W! Q: X% l( d. k- W
) D) z4 ~% S2 [$ @8 U0 V11.DESC在这个查询中起什么作用?
. {( @8 p$ u* q. n; s7 e" o8 R& C6 q3 c. j7 h
SELECT *
! {( q! V: p* U5 a' I. oFROM MY_TABLE
, y. d& a! I/ V& p5 t+ c0 T9 [WHERE ID > 0
; b# E1 \# o' d  @ORDER BY ID, NAME DESC& t9 U. R# B# Q% R# H' r( I

% ?; K- I1 H$ T  ~A.返回的数据集倒序排列8 S( K2 s6 D& z% e7 ^. g
B.ID相同的记录按NAME升序排列" ~6 S8 w& _; \( R
C.ID相同的记录按NAME倒序排列
# A, C! h6 Z( F- P* AD.返回的记录先按NAME排序,再安ID排序4 _% ]3 q: T3 _1 L
E.结果集中包含对NAME字段的描述2 ~3 a- H1 V+ o( {8 x6 n7 u3 X
, |, q! E/ K0 c* L
7 ~* s) u" R) Y7 G  D( j
12.以下哪个不是SQL函数?
0 x* U# J/ g+ D" R+ E4 m  j$ D3 M" p7 ~* F: \
A.AVG3 K" n  Q4 L5 n$ h
B.SUM
+ E3 G: m* _- o0 }* S& K* oC.MIN! h: Y/ d/ k, g. G2 T7 w1 z. c6 U# f
D.MAX* o( \4 A- f! T" c
E.CURRENT_DATE()# O7 o0 @2 U& R9 {! v" y$ W
9 i5 D( I( s$ b% x4 R; j( b, t/ o1 }
3 d1 X' u7 |2 e+ a* F# ~! ^+ P
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?: l9 o( b( x: b, m
3 o4 V7 w* n$ N" e
A.该字段必须有索引
# u2 [9 N% i; ~: h& _: rB.该字段必须包括在GROUP BY条件中! `+ l1 V3 t  b  R$ O
C.该字段必须包含一个累积值
8 T8 h: q6 J% f  O1 v# i0 l9 VD.该字段必须是主键- l  `& t8 N7 M* N  q/ H; g
E.该字段必须不能包含NULL值. W. V3 u' b! I
; k# m6 J, V7 }8 D( {) w' G
* Y$ \, U- T2 X5 L5 Y
14.以下查询输出什么?
1 ~  z3 c8 y2 |! q4 H6 b6 g: [
: y# w# H1 r# Y& ySELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
; D% D! o; f# s6 g' f& pON TABLE1.ID <> TABLE2.ID8 s2 c3 h  ^# J$ i/ I: [4 X1 B, \0 J

' G  g0 _9 C' `4 Z6 h7 B$ W6 aA.TABLE1和TABLE2不相同的记录
7 ^% F! Q! T, s. tB.两个表中相同的记录& L0 K, G+ `) y: C/ `
C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
% q: E- J5 {0 p0 A& g1 ED.两表中不同记录的条数
! f" `/ J( \5 Z1 i6 {7 L' T  M4 dE.数字2
2 M! _9 R0 X# V6 k/ q# R7 N. G" K( i+ w: u8 P

; B( F  {1 M5 c1 i8 V' W15.______能保证一组SQL语句不受干扰的运行?# g  ^  h4 n! I4 m0 ?% B
* v: b; \2 r" P, J& y9 V
答案:____________/ B  v. n7 s8 O8 c& ~8 i6 N

2 \- w9 n- S' V3 G) J
* ~# v8 S0 C1 F* j% u9 ^0 I9 T; y0 O3 M/ E
答案速查3 C& ^2 G+ Q- T! C
1:BC
& S, q2 |+ i  I8 B$ b( {2:WHERE4 E  T: A7 ^9 Y7 R! m0 e1 G
3:B
2 ~, P. {) w+ s" W* p4:E
3 l6 \! O" n) b' Z, q$ z/ j6 |9 z5:BD- ^' x$ }. x: U# b" W
6:INSERT
2 w- _5 [" a- w% U7:C
  z1 N1 _  J& n$ j) s3 i8:A5 Z/ t' |% L6 _+ f! {; `
9:C
: x+ e. Q! u. J1 Y3 L7 ?( G0 G7 D  K10:E% F! ^+ ^4 X, [- d$ y# j% S
11:C3 u% u8 \3 n/ \- f) E* ^5 Y; _& v
12:E
% _7 }% C8 h% ^+ U1 Y$ K: I7 ?13:BC
: l! j4 d: A. @: C. y14:C
/ z# L/ z$ [- _4 J8 x15:事务
, j8 n" \) g; G" x7 y) _
  G2 a" l9 ]: Y) L  T5 j2 w- o! }) A- B5 l0 [  [4 `

- e" `3 A+ B3 r% b* J$ i答案详解9 I4 Z: ^3 {& e6 j4 j3 B% l
7 W8 H+ a! }6 z) N. r( R2 X
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
6 h% U5 G6 g$ L5 j% }
! W; r' l% Z% g2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
( O- `( |% o8 `0 A( I  v% I4 ?  r# m2 E' q9 w' b
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。, |! m# z0 C0 T' \6 B+ [4 F" v2 l
' w& ?, [( e' X( X
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
/ H) M) \8 e; i6 m
' H- d& R% o6 A. |6 _) c9 H; [; _5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。
4 Z: A' n9 @9 ]2 \' G6 ]
% ^* b+ a9 @. @1 `6.答案显然是INSERT。
) o; l1 B! R5 U) ?0 ?: S
( M- q% l1 a) k( v7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。' Q( q6 p4 a( B  V; G" }, i7 [* E

( x( E( i5 y2 J+ l0 }8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。4 U4 G# R  U, p5 {/ f$ T& }7 K
* ?  z+ m: H6 K$ Q" \6 K/ O+ |
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。9 Z6 N# T! y& C9 ?6 L

4 x' H- `% a2 G1 _4 U10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。, g: Z" }' ~  I& X1 ]

: h4 ~; |' u1 K" s" v7 |# `11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
! h; ~/ s( K) U
# d' r  N0 \+ R8 a* z5 r0 X( r0 M12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
- {4 w+ u, [6 q. V  z4 ]) R% J# m* S
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。$ v) ]! o# L0 D: P+ K. e

( r8 m: r3 e9 P+ d14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。$ O) B; L: I: l( _+ b: C3 V

! N$ V3 {" ]8 f" f15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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