返回列表 发帖

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。. o3 E! N! U/ D8 V
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
& x) ]( s" ]/ E5 g$ M' B" |6 ?, t本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。3 f( g; v+ O% q  W

& V  V9 J2 H; J9 ]
. }% h1 N3 L$ ^9 A问题1 n$ s3 O& T( Y0 d9 f. I" v
1 j0 J+ T" V/ b. O8 {
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)7 }% Y; G3 A. g+ a, t1 B1 ^) x
8 t$ ^' Z7 @% D) ]' T3 Q, u$ r! @
SELECT * FROM MY_TABLE+ H& d8 G" i: d$ {( g: K; P7 P

2 j/ y# D" ~' w5 xA.如果可能,用把查询转换成存储例程# u; ^! z, W# h8 A: B; l
B.如果程序允许,给查询指定返回记录的范围
; Z- z) A  x% X2 s) ], eC.如果可能,添加where条件1 _' d$ P- W, @
D.如果DBMS允许,把查询转换成视图% {$ \0 }1 J# g; S5 v0 ]
E.如果DBMS允许,使用事先准备好的语句' w: |+ x. q6 e, w4 \! F
2 ]/ z# a+ X* X' F
9 t- j& \/ `& ^5 E* e# `
2.可以用添加______条件的方式对查询返回的数据集进行过滤?
! W( z- T* J: {# x) [, z& t
) d2 {) r' f7 l- L答案:____________
% k7 F7 v# I$ o9 D/ j. e( }6 l9 O% W# B0 W0 C+ U' j

* a2 O. D( O$ d0 L7 G3.内关联(inner join)是用来做什么的?
, s  o: M' n7 f* r/ a
& m. h5 @9 K8 B5 N7 PA.把两个表通过相同字段关联入一张持久的表中
+ g2 x8 j6 K9 U! M  d4 JB.创建基于两个表中相同相同行的结果集
; h4 @, A5 _! W, Z, TC.创建基于一个表中的记录的数据集. o! L: L- T* I( U+ v2 d
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集8 S: y" ?+ x: R; Y
E.以上都不对- \: S  i4 N/ [8 y# F2 `
5 `* S  }+ i8 g& ~9 j

3 B. x3 W& @' Z3 p1 d4.以下哪个DBMS没有PHP扩展库?
# l8 y& \% P  R
9 d5 d* f0 I) dA.MySQL
& F; [2 }5 D- N% H+ J6 _/ bB.IBM DB/2
: G8 j; M" m3 KC.PostgreSQL
/ d& y5 f% y: WD.Microsoft SQL Server
, t# z3 s( v9 y7 {% O! I  IE.以上都不对
* g* Y; ]( I: n3 W5 h7 o  g) U6 Q  ~0 _
" n4 X: h- y2 @2 X
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选), ]0 W; D0 V- O/ i# C2 [' c) u

, n9 z2 ]* z' K% I<?php0 ^5 y1 X. b; f4 x8 w( G2 h; `! X
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
$ t: G9 y3 d2 V2 a5 b?>
/ \% k2 n% O! {+ z* P+ i) n+ D; U
9 B; N3 T5 t. p" K0 l' ~A.MYTABLE表中的记录超过1条' b2 }' f- I# H3 U
B.用户输入的数据需要经过适当的转义和过滤
/ M2 n' j, K! z! A% o; YC.调用该函数将产生一个包含了其他记录条数的记录' U) w5 i& Z" G0 m$ m6 q
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
6 w! P' h5 A) dE.查询语句中应该包含数据库名; J3 [' V% u3 Z" b0 U

$ s1 s, U2 I3 G9 z4 g* h+ e. s, L( x6 r& o
6.______语句能用来向已存在的表中添加新的记录。9 |) e' }( L, z% r1 N$ L
  X# j- W% P* c; }
答案:____________: J2 o. b) ?0 ]/ H
* i5 B" |6 N& q5 u4 ^; h) G

( T, T" n) F* H  {5 \0 {. s7.以下哪个说法正确?
# E8 i$ R2 v9 \4 T( a
& Z/ c6 ~5 ?- B6 _1 m4 l9 GA.使用索引能加快插入数据的速度3 p) e' ~" Q; B* ^( [
B.良好的索引策略有助于防止跨站攻击$ r9 ^' u( W, S# k  Q
C.应当根据数据库的实际应用按理设计索引) u2 V( h- i4 D+ d3 U' y* h
D.删除一条记录将导致整个表的索引被破坏
+ m6 u6 J: V$ u, z: u2 rE.只有数字记录行需要索引5 `4 Z5 L7 u  S. z5 w

- X: \3 H: H! ~4 `9 N1 Z# B0 Y; W( M. F4 H# A5 S6 [) z
8.join能否被嵌套?1 `, H# Z+ L& @+ @8 ^! b8 D- m

2 w  X* o1 \% x" W- ]& NA.能( ~# A% e. Q# g
B.不能: k' g7 l0 K* }( ?+ e9 N1 D

% w/ J+ F, S! h, G/ ?$ W+ T4 B
0 j, D7 @! _4 q  U0 J- R) H9.考虑如下数据表和查询。如何添加索引能提高查询速度?
* L. J6 u; G& a. E. G( E1 g) Y, b& B! C3 r) t
CREATE TABLE MYTABLE (+ `+ @( ~" w8 i! r* u* h6 I
ID INT," l# ], Y9 @- i/ G
NAME VARCHAR (100),
) q1 Z. B" o* {* W. wADDRESS1 VARCHAR (100),& e! n2 O3 ~3 d6 q$ \; S/ d) `
ADDRESS2 VARCHAR (100),
9 u/ t* b' C' @ZIPCODE VARCHAR (10),
) M2 j6 ^: S3 v1 [CITY VARCHAR (50),
- u4 q% r& B! WPROVINCE VARCHAR (2)4 g. r) }# [# r3 u% i3 z" q7 ]8 H% e
)" R2 M# s; b! e2 p
SELECT ID, VARCHAR
" K7 {& E( r1 x8 B/ T7 pFROM MYTABLE
9 {' H+ K4 \7 H+ P6 qWHERE ID BETWEEN 0 AND 100
5 v4 A" C/ }# G/ p* t  bORDER BY NAME, ZIPCODE
% `) V3 G( j7 C, R5 u- {& U4 h% K8 y* S, B
A.给ID添加索引
3 m9 C4 ~: Q2 H% c" {5 Q2 }B.给NAME和ADDRESS1添加索引
4 I& `4 X+ w( y& d7 r/ uC.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
: I7 F( V$ u& b: Y, w& K6 `9 qD.给ZIPCODE和NAME添加索引$ j( d& t# W( V7 I
E.给ZIPCODE添加全文检索
1 A9 y! i1 x# h
: Z5 e  N) T, i0 b: h0 j
) A% z8 p  b* X5 M9 x10.执行以下SQL语句后将发生什么?
7 Z5 n- z" Z, @! P0 d0 `9 j
* c6 t, |0 j4 P: |2 r% XBEGIN TRANSACTION
' G) ^7 y* _; LDELETE FROM MYTABLE WHERE ID=16 w' G; c( e* [( g# X7 R; c
DELETE FROM OTHERTABLE
  C5 M, O/ N5 k2 X/ s# KROLLBACK TRANSACTION
  e4 A& ]+ F+ _1 ?7 I- H* V& R" p" s9 g8 k( Y0 \
A.OTHERTABLE中的内容将被删除5 h/ q) T9 }0 V, R/ s
B.OTHERTABLE和MYTABLE中的内容都会被删除
) s& m( L' T0 o8 O1 J+ ]C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
  S7 S4 x5 ~3 oD.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
- T: l: d4 F. h( F1 I2 fE.数据库没用变化
9 W' a  S6 _/ ?' [# s  T
/ n# ?0 `- p1 g% }
* F- O" X& k0 i& v( J. p+ K11.DESC在这个查询中起什么作用?. Q5 c7 d, @' ~
$ {5 F9 s/ h  |% S$ @  O! Y
SELECT *
. ]8 I1 L2 ~" _  v3 bFROM MY_TABLE
. Z# ^- F# `: u2 g& rWHERE ID > 0
, j1 l1 S  J7 i& `' ~ORDER BY ID, NAME DESC
2 G2 L+ `4 @# u* I$ g
4 f& Q+ ~; e# r! A9 gA.返回的数据集倒序排列
0 v+ g  k8 Y+ r: SB.ID相同的记录按NAME升序排列
. L  \$ d& h  z' c  V4 v2 hC.ID相同的记录按NAME倒序排列
) \& I+ K- u$ f  t$ A, @D.返回的记录先按NAME排序,再安ID排序0 g! t/ J8 t6 u, O
E.结果集中包含对NAME字段的描述
1 o! f5 G. F" X% o" g) K9 L% c& K! }4 r% c

/ Q8 r7 U  Q6 ^# T- x9 O8 Y. [  m12.以下哪个不是SQL函数?' e2 ?4 i  L4 \5 _5 E2 U0 c& ?
+ G# Q0 k  a$ V# O6 P) ]
A.AVG
( ]* P; t" L4 X9 U% h8 P9 jB.SUM+ a+ ~9 [& |: ~, t( S
C.MIN
( c4 Y- D8 O# q' P  e0 `D.MAX4 G' ?) O$ n- {' O  Y
E.CURRENT_DATE()
& o- m# t) F2 `7 P5 O0 {( `+ l! p* m) U$ Y* h
, V: m, z" E: n' B" W
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?% ~4 U: i* I% X! u8 O# O, Y  v) I% m

8 L) p: C0 D. ZA.该字段必须有索引
8 ^4 t/ j9 r4 mB.该字段必须包括在GROUP BY条件中' f" C: @: i$ G6 p" s& [+ Y/ \
C.该字段必须包含一个累积值4 b  ^# R. k4 z& X
D.该字段必须是主键# k3 V0 X. O; U% }7 \+ v. B
E.该字段必须不能包含NULL值
  c+ v" G; W3 _4 N5 N0 I0 p: \2 w5 k; r

- _7 y7 ^0 {' Q- t14.以下查询输出什么?/ Y. f* c: H# e7 I/ O. v. u
0 |+ w7 Q# J$ f1 J% c8 E
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2' Q3 L: {& k; v+ m
ON TABLE1.ID <> TABLE2.ID% @2 D- Y6 m# T

! R) \1 k  m$ S/ P/ n" iA.TABLE1和TABLE2不相同的记录+ g- w5 d! q$ I5 a, ]
B.两个表中相同的记录0 c7 x0 c$ F# R' `& `
C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数; u, [- Z* X: y% V$ f6 H% B) W% o
D.两表中不同记录的条数
2 H$ H2 {/ a7 {! x* GE.数字21 d6 y- _& N; ]( R+ M8 _

* t8 Z9 D2 y0 F! j# U/ Y: v! W+ a* c/ _0 T
15.______能保证一组SQL语句不受干扰的运行?5 @! e( m1 g4 }

7 I" }5 H- L4 R8 ]; Q答案:____________
2 f( b' N$ e' J7 D1 b. P4 x9 H2 j  x  ~0 P3 t9 r" _

( k) e* ]- \: z9 z: U) e: s) B
* ]& f1 t6 t; o答案速查3 t3 {. ~6 Y' v9 O2 O
1:BC
7 S' A6 _7 n0 b( s2:WHERE9 x1 C9 [* N9 ~5 T
3:B# G) T, C6 x% o$ c. A
4:E9 H2 S' c& p3 k4 C+ z. z% c* f# _
5:BD
  A/ [8 j$ g# r' g6:INSERT+ Y" U, l% k4 [- m
7:C
: k% K9 H. T: h* Y" E8:A
8 Q4 ?3 x. b" m9 a2 M4 _% V, x. x# v9:C8 x) ~  w8 l; y6 p4 L
10:E( E" i5 w; O& Y% K6 b
11:C
& r! Y6 h2 l* B5 a. \$ l1 Y) M12:E
8 F" o( n) `+ j6 {9 u, a13:BC+ `6 _$ t; Q9 P
14:C- I3 n' P% l) C* t
15:事务7 M" f4 I9 e' e/ V

3 H) Q4 V# W  w- A3 h' z' h% i8 M' Q8 R5 g# w

2 E5 U. Z6 o) e答案详解
  Q$ j8 A  u. }, ?3 q3 t# p/ B8 i$ L# ]
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。+ x( L1 n: u% R
- o( ~4 G" u" x% ~. b0 g7 z
2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
! o$ u5 p3 F  q5 V. t7 @
( E4 G1 q$ L9 L# G1 i7 `' [4 [3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。
, K2 i, Y! o. G& {! b* n. S3 R1 q6 C8 u/ E) ^
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
& |, Z# A0 d( s9 f8 S5 A! h2 I1 |# u
5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。
4 E  E0 }* B/ B$ B/ R# }+ K& Q$ U
6.答案显然是INSERT。& a, V6 u5 m0 Q! ]  X
7 r' Q- Q, V& B5 y
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
; h: x  V8 s4 Y  S1 ]% y# L8 J, C: L! r: S+ w
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。; ^$ D" `3 o; F# h- V
+ h3 @4 {6 h5 Y) R; h. I+ D. L4 r% ?
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。" C5 @7 x! \+ _3 ~' L
* h! y3 w3 J# T; P
10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
- k2 n4 h4 w6 K2 L! O& G. o, ~5 A* c( m, c5 Q% o
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。. X/ U: t" y& M

9 U- o+ Y, o$ i% _- P4 p12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。* X2 y0 Y  r/ s& b8 W, t
  n- R+ |! D% ~
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
9 z/ |: k# M, G
  C8 r% K3 W$ \14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。! t; j: ]& O0 ^& ^3 p4 g
5 R0 G6 E& N; L1 a3 k: Q) C# u
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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