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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。- ~  F. P' y" m
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。  i+ }, n9 q1 ?; H
本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
2 C8 P' |! Y0 k$ Q& Y2 h% n5 l: s2 o# u) J) B2 O* z
2 |4 u7 m  z. |! T
问题$ n  v# l: M* T' b* M" x. m6 H. J
+ L( R/ i' u1 g0 F, G
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)4 w" M+ b- L, m& j$ ?, O, q/ g

; Q1 e4 V, l, s. j& b' bSELECT * FROM MY_TABLE
# a+ H# R( t8 a( R% D/ k. q+ B3 F* k' N) X; T8 S+ Q) U
A.如果可能,用把查询转换成存储例程! c2 ~8 G) T0 a2 z8 d( \) S
B.如果程序允许,给查询指定返回记录的范围
4 i' e! b, {; c, wC.如果可能,添加where条件
0 ]# Z9 \- x* }/ u: v# e* O/ xD.如果DBMS允许,把查询转换成视图- {  A1 J( e) }; K
E.如果DBMS允许,使用事先准备好的语句
- L. a! x: T; q( o0 N. I
+ X+ ]! m; q% ?: R( [
2 r7 g) P% w& \3 ?2.可以用添加______条件的方式对查询返回的数据集进行过滤?/ H, o/ n8 K( }# s% \5 c0 e
4 `% v  p7 r* Z
答案:____________; {/ [6 c2 O5 B) q+ U2 x. V

3 c! x0 T# u4 w  O  z- {' p( h& U: |+ I% G1 D& C0 f) }9 V
3.内关联(inner join)是用来做什么的?
7 j  W1 G. c+ j+ B7 s3 h) u. j+ ^: Q0 P: E& e7 y3 c
A.把两个表通过相同字段关联入一张持久的表中
5 p5 g' O( g2 J& ~# q* cB.创建基于两个表中相同相同行的结果集+ D9 [& a+ `, |
C.创建基于一个表中的记录的数据集; C+ X, v# q, @& ^
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集% ~+ f6 M% D' T2 k3 |9 S
E.以上都不对8 m: e0 K: q  k( y1 S) |

2 R0 r. n4 _! e( U# B4 `( T$ o& |* g0 G7 n5 t
4.以下哪个DBMS没有PHP扩展库?1 N( L# r+ ]* R, \7 e

8 L$ x2 k+ f4 x2 o( Q8 S7 AA.MySQL
, V( R4 m& t6 \$ E4 `7 C* gB.IBM DB/2
4 k3 I" {' K- u  X) wC.PostgreSQL
, H$ }( c+ l5 p! ED.Microsoft SQL Server$ V, [: V' Y1 [8 j% R* j
E.以上都不对
, g- ~+ g7 j6 ?( ]4 t2 K& I
* O0 Y0 G& D$ u! n$ {1 W, B" g8 b2 q. L5 Y" z4 }, A" I
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
  U' g. g" N6 A8 \. G2 i  u0 F$ b' M: Z" ~, T5 T
<?php$ J4 {" S- x% {) X! R5 {9 R& [
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
& V& i6 C# E4 R2 I& q% F?>% [5 c4 R6 u7 H: B4 G: x( ?4 [8 j

6 K1 b! J! c1 J4 Y8 K3 C, G, O5 y, EA.MYTABLE表中的记录超过1条$ ~" ?2 ~# w0 `, y# W7 h3 \6 i
B.用户输入的数据需要经过适当的转义和过滤) P/ J, e8 o& V6 e7 c, X; l7 Y+ Q
C.调用该函数将产生一个包含了其他记录条数的记录
; z5 l" V( r  HD.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
1 K9 G( x: I% {" x% |+ |+ VE.查询语句中应该包含数据库名
) Y* b- h) H  a' d/ ^0 X2 B$ `7 m
# A6 V$ A! y3 P& @" q# b9 k* \  s
9 j4 a) m6 A. o0 p+ u/ k6.______语句能用来向已存在的表中添加新的记录。( w5 z% _* G' H+ e* ?- x9 O; }& d
+ ?  m. x9 ]4 C, T. m' ]
答案:____________
1 J% p, z+ O8 T- o
6 M6 N1 w7 v! A& G/ l3 S/ o
3 l  D9 S! V# [7.以下哪个说法正确?# H5 \! ^( [! P% G1 W0 n+ n
, E9 ]/ X$ j- R' H- r! g3 z- F
A.使用索引能加快插入数据的速度
* h- c+ S9 a( o1 q  h6 rB.良好的索引策略有助于防止跨站攻击; j& r+ p+ I7 Z! O+ _$ [0 J7 e; r2 o. U- h
C.应当根据数据库的实际应用按理设计索引
# X* X+ k, j- H" i% C1 X) R$ u9 eD.删除一条记录将导致整个表的索引被破坏) \8 _3 {' O0 U- w: ^2 e
E.只有数字记录行需要索引7 ?: ]  d, q, a. U4 J4 a3 I

8 Y) C8 Y! r4 c+ P. s
& A. ~" @8 X' ]7 \8.join能否被嵌套?
8 }, Q8 l0 o: J5 {( _! s( f+ V
8 j. v+ k1 C. f3 M! E) ^- P% iA.能
2 o% [9 W( A/ M/ j9 pB.不能4 P& N/ w- k# K( p7 S& O

/ P  J( q: P  B- F7 k: v: G( \( `/ C4 K$ y# ~5 x" ]0 z
9.考虑如下数据表和查询。如何添加索引能提高查询速度?
+ u5 s) v3 _6 @9 ~. a0 F8 {
  O. {* h" L/ R! D8 MCREATE TABLE MYTABLE (
; s+ A- ]. ~8 LID INT,6 |2 P/ i! G8 E
NAME VARCHAR (100),
4 v5 L5 w6 |& l4 k# l; J7 [ADDRESS1 VARCHAR (100),
* n3 t5 M- A- V9 q5 SADDRESS2 VARCHAR (100),7 x$ |: A8 F) T" f" z! |1 E5 H+ e
ZIPCODE VARCHAR (10),
4 w) T" B0 Y7 S& y# G+ B% ZCITY VARCHAR (50),
6 l: g! ?7 m4 oPROVINCE VARCHAR (2)
6 y3 @+ Z; P7 x; Q$ d, u* ^3 w2 Q: ^)
& L2 u6 m8 j& _3 \SELECT ID, VARCHAR" v* o, N% p7 H: l: G2 g4 P& R; X
FROM MYTABLE
$ U  v) J* m+ N+ kWHERE ID BETWEEN 0 AND 100
  p. ^* E% n* e" a8 ?6 sORDER BY NAME, ZIPCODE/ {1 L) I& p6 T/ g

0 t0 c5 {- D) Y  O5 U0 m2 E, HA.给ID添加索引" d* J3 J, X1 ~$ y) s  V
B.给NAME和ADDRESS1添加索引
% ~* \4 E, J# N. v! E+ nC.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
, ]: s7 v6 D) c/ _0 E# R5 eD.给ZIPCODE和NAME添加索引
( K1 u1 o+ c! o( fE.给ZIPCODE添加全文检索4 [, j, ]# _+ S# e/ C
2 d/ T2 P/ Z) F( \7 @8 x4 E6 U

4 s: ]2 y! D, F  Q10.执行以下SQL语句后将发生什么?) t1 o% f5 ~  {% `- M4 |4 V
# I2 m0 N3 G0 b4 D
BEGIN TRANSACTION
% p0 P- a7 B, B7 b% Q1 ~DELETE FROM MYTABLE WHERE ID=16 n  P( r$ U# N  p( W
DELETE FROM OTHERTABLE
, M& n1 _  j. r# |" ~ROLLBACK TRANSACTION0 {- x9 ]' B2 w: @

6 \1 w1 C2 g2 s' l$ S4 m$ g/ B) oA.OTHERTABLE中的内容将被删除
5 N$ e6 g; N" n# _: {. D. D$ gB.OTHERTABLE和MYTABLE中的内容都会被删除
& G+ V& Z* ^+ p# tC.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
3 z% L1 j& _5 d; r1 ^D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化1 _! q3 n6 Y0 h# t
E.数据库没用变化4 j" ?7 K1 o- t$ V

, O! u, z0 C5 d: `# `. ?# z# w0 Q: C: @& p: U1 f* a$ I
11.DESC在这个查询中起什么作用?8 g% H+ K; V& F

) N( O2 X5 T- [# N, x) YSELECT *: N0 P' |  g; w2 }4 L, [
FROM MY_TABLE
/ @+ J: D2 V$ s) J' c4 H) x* fWHERE ID > 0
. Y+ F1 R# C8 ]2 f6 P6 [ORDER BY ID, NAME DESC
. z1 z( n1 T9 H6 R0 J3 ~2 d: B# P% |" @& m" @
A.返回的数据集倒序排列, j1 w2 h# _) n1 H8 H. {" T4 Q' O
B.ID相同的记录按NAME升序排列* ?% n. Q. [, |9 O$ Q- y
C.ID相同的记录按NAME倒序排列
4 R; U- |/ Y$ Q, Q6 w. SD.返回的记录先按NAME排序,再安ID排序/ Y3 p7 D- X4 n
E.结果集中包含对NAME字段的描述
# E. J  M1 Y: m1 j! ]  L! [/ \
6 q4 P3 j& n3 b/ A7 [; W4 f  `3 ?% _9 l( r2 G7 E0 [3 n5 {6 M
12.以下哪个不是SQL函数?' V, l- z4 s' M+ m
* _) D  w* Z3 F  _7 d/ i1 b
A.AVG" |0 Q0 W. N9 F
B.SUM
. \2 W$ R& S" }+ A+ u, e2 R9 hC.MIN
7 L/ r+ O8 a3 fD.MAX2 Q3 T" \6 m* _: n8 H
E.CURRENT_DATE()
5 Q4 t1 N1 P- w, ]/ w
% `: B1 T6 X. X4 x7 j9 p
( Z" \. a; p0 Z9 c13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?+ ~: X1 y, g9 M3 n' b

  O, s, q: \" ^, Y  l5 lA.该字段必须有索引/ y! V! D. u% F
B.该字段必须包括在GROUP BY条件中
' {' i2 P; w/ b& w/ mC.该字段必须包含一个累积值
6 H8 c7 ]; r: I% DD.该字段必须是主键
' t6 S/ Q. w" d4 P+ vE.该字段必须不能包含NULL值
8 }) m9 I9 M  w, X3 y, ?, b/ Q
1 f7 _! j8 _! i1 X
, q4 m. K, P# J6 E6 E9 C14.以下查询输出什么?& `0 l/ q# Z( b$ Y( W1 j
! ~: x* b$ L$ Z* V, r& C
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2( C+ T1 b# L7 a: k1 D# `5 I
ON TABLE1.ID <> TABLE2.ID
0 |/ ^4 l" ]1 ]( s( K6 u: h- c$ D+ `  L8 `; v* x1 a
A.TABLE1和TABLE2不相同的记录
( \+ F) |, b( @. H( HB.两个表中相同的记录
/ v# r% {+ d( ?- n8 ^. {' _, m( vC.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
' }9 \% }' y% `6 k" X5 ND.两表中不同记录的条数6 ?5 q5 b8 ~- \$ D6 i5 H( ~
E.数字2
6 {, m" X0 ~( l3 V( A' f/ ~4 B- b% ~$ Y) H! f

, u- j: F6 F- X7 R7 e$ V( W0 y1 J15.______能保证一组SQL语句不受干扰的运行?( F+ u& X: B  g+ [( B. i
3 A; S& a+ v) }& P1 b. I
答案:____________% ]/ ]. ?* x5 y- Q7 n" ]: }! n- W
* e+ _2 M) e7 C8 R

7 c5 g  M$ ~9 A0 C( Y. |2 D: S8 T% H
0 h5 T2 i/ S" N% W3 Q答案速查# _+ Q) s# s: c2 a% c; s2 \, a4 j
1:BC5 U  a7 ^" C5 m/ R
2:WHERE
# f8 Z1 E. P' u: i4 b1 ]/ x3:B
% k9 k1 J4 S" Q6 v  E" ~4:E$ W; l% \/ f5 }2 ]7 a
5:BD+ e! b" x; P2 j& K# h+ }6 |7 [: q1 {
6:INSERT
" T4 V* C$ h/ o) X: m( z2 v' _. M$ p; e9 G7:C- T) e6 g3 {% `+ A+ w5 \- H+ j$ f0 x
8:A0 T; x7 ]- Y4 o# F7 X, V  k2 k8 z
9:C
' S+ q) A9 e' W2 U4 l. B8 ?. u10:E
9 W) g5 L5 v+ c5 q. L: B: M* C6 e11:C2 d% z7 k* {# Q
12:E+ w3 h/ G& P- J# p& a' H5 H$ F
13:BC
: ^0 Q& [0 N( a& Q14:C
" S' o5 v+ R+ R" q& C4 @: `! @. k8 H15:事务
+ r" i. a8 {$ a2 S/ N. Y* j' K( L6 I6 B, k
( c8 d8 k2 a# M1 O  \
0 @+ C: }: B# b) b
答案详解  c7 Q, o+ t$ X$ o' ]

5 s( O& r$ w- `0 K% J* q( S/ e1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
- L% U* N; {7 _8 v: T3 V8 H; h$ d' [# K( S* R; g8 W3 Z9 d
2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。7 {6 x. v2 b, E6 r: |# T
8 k; I5 H* i; X( I
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。4 C6 a$ z9 C. C4 Z6 Q8 G
. ?/ s4 s) S7 R* }5 A
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。; X- j; \( c+ G" m- c

: }  |9 U" R# b$ r. S* m. y7 o5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。1 \$ w, m; @+ Q, m7 U) T9 q
- \  V5 [! N) N/ @' V& t0 }, P
6.答案显然是INSERT。
' a9 O- |7 X1 c6 C8 Q/ W* v
+ y  ^0 G, H+ ?* k7 \7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
0 T2 y6 h1 h6 {2 ?2 u2 L' }9 k1 G8 j% h  G/ J
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
3 z0 o- @. T9 @/ r7 b! d& y% a" E. R) `8 p, [' ~( l( A
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。: o6 _. t; j0 U3 m+ M
9 l; A; A. @) i. M( Z, z
10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
& X# f+ }# |8 W9 U8 \7 x4 W' Y$ o4 u! }; D
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
4 u9 h8 @) B( _; a/ K3 h% r5 p; f. t: o) f5 J. F5 {
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
; G1 n* H' U  U: P& j# W0 o, S& W9 ^+ j
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。5 z# t- Y8 i5 c6 v) {2 C
2 g' ~. @7 @1 }8 _$ f) a" }* Q
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。3 O  l9 U0 R. I+ n' L

0 Q9 z3 e: k! w4 ^" k! X4 H15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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