Board logo

标题: [Zend权威认证试题讲解]第九章 - PHP与数据库 [打印本页]

作者: admin    时间: 2008-4-17 14:44     标题: [Zend权威认证试题讲解]第九章 - PHP与数据库

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。/ x4 E) F- X( Y6 ]
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。4 n3 G& N" N5 _. }+ X
本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。' n( H: J! T# W+ V

6 \: ~7 k0 Q1 q2 A* v% B; G# U/ F+ H: ~8 k
问题
* u$ z3 |$ C* [$ h9 ?' g9 q' Z
, E. J. I0 t, E- J1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)
6 x1 j+ ^" G# `* q5 G# C3 h  D. a, H: G1 J* s
SELECT * FROM MY_TABLE  U5 z; }6 w5 b& W( K; N* D& u
) z2 g8 {. [6 [4 t  t7 k3 U
A.如果可能,用把查询转换成存储例程
: x! s; C  }2 T! p& a0 }1 P% n+ B& AB.如果程序允许,给查询指定返回记录的范围& q( c9 n5 y7 A
C.如果可能,添加where条件
+ T/ C6 r& Q/ d+ {  @4 \D.如果DBMS允许,把查询转换成视图, |' e: [0 s7 L% E2 ~
E.如果DBMS允许,使用事先准备好的语句
- z# @' q* W! S/ C2 S8 g9 l5 Q. `8 ]( R0 z' y1 \4 N
" I1 W8 r6 p! u
2.可以用添加______条件的方式对查询返回的数据集进行过滤?
% w+ d+ ^9 n; k/ E( n% J9 B2 d
6 G4 Q8 p7 t6 A答案:____________! B. M/ w# X# |! Q0 Q

* Y4 |2 j2 G. t3 X) Q( A: V# }
# Y: a% \) x: P$ d3.内关联(inner join)是用来做什么的?1 z' v0 _/ {5 v* U7 H- f7 u
3 U$ q3 E+ w5 V" j2 `5 X$ a
A.把两个表通过相同字段关联入一张持久的表中
, q1 Q! ?! s& s- V7 GB.创建基于两个表中相同相同行的结果集7 r! O& q" }4 j! k/ y( D- M
C.创建基于一个表中的记录的数据集
0 L' d( u0 @& ]: @2 z# oD.创建一个包含两个表中相同记录和一个表中全部记录的结果集" I9 P4 K) p" k  x3 Z* e
E.以上都不对
  _; z4 h! F2 A/ _( v
: d& `) J, u& a" u4 B2 A8 p# Y8 Q
4.以下哪个DBMS没有PHP扩展库?0 G" Z1 [$ F/ k# `2 ]/ C

) E$ {8 E5 r( O( I2 M. DA.MySQL
0 d0 x! S9 J9 w! k% {B.IBM DB/2
. U% b7 H8 F  S1 q( N4 V7 gC.PostgreSQL
4 h* ]$ r! R& W$ Z# n9 @, q' X$ cD.Microsoft SQL Server
3 V; u/ R( q- A' `/ xE.以上都不对
$ C! d9 S& R" k# k
, [* F1 M  `* g7 V% `
5 m" m" r4 o! g+ h1 t/ \& J) D; L& U5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)2 O6 Z5 W% ?) c* d

" p! G( I1 b/ P4 y$ ^<?php1 V* v7 i0 @+ S9 h3 i1 A' `+ ^0 B
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
" D; U& x4 c6 j$ p- S4 g?>& ^6 x: Q; S# K$ {# @
5 ]5 d2 c3 C& E2 E; q
A.MYTABLE表中的记录超过1条6 _- e3 @+ w+ Y' F. Y
B.用户输入的数据需要经过适当的转义和过滤+ W3 C4 G7 x9 o9 l) u
C.调用该函数将产生一个包含了其他记录条数的记录
, W% W4 [; {! xD.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除5 q6 i5 ~7 }" v( g# w
E.查询语句中应该包含数据库名
$ B9 t' N% F9 ~( a
* @' b) W1 l  N( w5 W* J8 d# B7 R
6.______语句能用来向已存在的表中添加新的记录。; ~# A  Y$ n. T$ R
$ ]0 N' L5 {* n+ |
答案:____________
0 r. E* p/ K: {2 P9 O
/ A# n% N+ i$ {0 P5 G- _* S: x9 I
0 F) L& R4 J9 g4 x7.以下哪个说法正确?
; O' N" n1 J( R5 d
0 Z+ t5 L) {+ O. }; j1 hA.使用索引能加快插入数据的速度- l8 Z8 V- o' u
B.良好的索引策略有助于防止跨站攻击6 _  }0 @( K- H* f9 o, h
C.应当根据数据库的实际应用按理设计索引3 A# Z- G3 r  \8 c2 z4 }
D.删除一条记录将导致整个表的索引被破坏
+ v7 G) Q7 W2 _) n0 _7 Q" tE.只有数字记录行需要索引
( X% J. }' t/ a- I& m; e- A! p, J* G. i- H
: f7 {; i( b* S  k9 P9 x) l  I$ T
8.join能否被嵌套?6 `) a' o5 Q7 d2 t
- P) D  c% E9 r- ~, |
A.能
8 P' @/ A% \' L4 S& yB.不能
' U2 e3 x0 Z& y, }
/ _0 l2 x: b& K/ t4 x
0 n  D  C4 X7 R! m9 e. J3 {2 [- {, n9.考虑如下数据表和查询。如何添加索引能提高查询速度?3 Y  {9 V. G: H) R4 m4 R3 K" D
7 P1 ]6 D5 l- [  ^
CREATE TABLE MYTABLE (
0 [* t% ]; @1 ]. f' y& aID INT,
% ]* \# e# C8 GNAME VARCHAR (100),
2 e3 q  @- o8 l* M! x3 j! c8 yADDRESS1 VARCHAR (100),
) y, K. ~% F2 c- H8 q8 lADDRESS2 VARCHAR (100),
7 D) U: u. u+ r6 q1 QZIPCODE VARCHAR (10),; R4 K. S2 l/ z. W2 L7 x3 A
CITY VARCHAR (50),
/ E& {4 [' p* j+ V1 y8 m: P6 q  }4 hPROVINCE VARCHAR (2)& F3 t/ ]% V$ [) X9 w
)
& _7 |4 j) p0 aSELECT ID, VARCHAR" s7 _& ^9 f+ a
FROM MYTABLE) g& n1 \8 ?$ _9 p9 `% c: ^
WHERE ID BETWEEN 0 AND 100
# G) }/ V' V; C: w) x1 WORDER BY NAME, ZIPCODE
4 G0 _3 L7 L# U  S8 d$ v( s, h, R0 W: v! g4 u, \9 Z
A.给ID添加索引
$ p, U* y- \& b, e0 `- T3 VB.给NAME和ADDRESS1添加索引
; f; X. L; e& b( ?, \C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
: i# ?) N, R  UD.给ZIPCODE和NAME添加索引* m. |- y* B4 C6 s/ L. r6 g
E.给ZIPCODE添加全文检索4 |. |+ b# B0 m' y4 W" p

* O- q# m# P1 k- [4 Y: D6 E
/ k$ U1 Y' t; n10.执行以下SQL语句后将发生什么?+ s( m7 W! a% @

- y. a8 |! p- X9 Q. n5 p6 hBEGIN TRANSACTION2 A+ ?9 Z. A& T6 A
DELETE FROM MYTABLE WHERE ID=1
( ^9 R/ [% v4 E* uDELETE FROM OTHERTABLE" z" j: l0 |. K, i2 ?
ROLLBACK TRANSACTION; Q  i; H3 c/ z6 m9 S8 u

: v9 y; v" ^! i, i* E9 C; R! {A.OTHERTABLE中的内容将被删除
* j$ _; H% r+ f! X# M$ ~8 }6 }% [B.OTHERTABLE和MYTABLE中的内容都会被删除
! ]0 f4 p6 t9 W: nC.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除/ Z9 w9 Q6 h6 ]- n, c+ ?+ b% \
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化; }1 [& @; B1 [6 @# a& ?* o
E.数据库没用变化! J" K/ v; O9 G1 G' w

. i) A! K8 Q# t9 z, v/ U8 G0 j- e% K3 Q' v6 q( r
11.DESC在这个查询中起什么作用?# C  F& M& g4 v: h8 D: F
* F) R) |$ M( ]
SELECT *3 r& q& q5 ]: A8 `  r5 Y) L& j
FROM MY_TABLE$ f" r9 Z1 M: m. O. |' }4 H$ r9 Q) L
WHERE ID > 09 L8 ?; f' D( I; m4 I' ]
ORDER BY ID, NAME DESC
6 m7 J* }/ M6 @9 @
8 d' m- d/ Z  I4 qA.返回的数据集倒序排列. {6 c2 s0 e6 {  J- w6 D
B.ID相同的记录按NAME升序排列
' H/ ^- C0 ~  S0 Y( D5 bC.ID相同的记录按NAME倒序排列
& a2 S1 I9 y) A& T6 o7 HD.返回的记录先按NAME排序,再安ID排序# L/ a. i8 }$ p6 ?5 ?: m" I
E.结果集中包含对NAME字段的描述) A8 G) w) B" g- W+ @
6 e4 j( E! g+ r5 X5 K
' i! G' j  x0 }5 V
12.以下哪个不是SQL函数?# y( j1 ?5 Q2 [4 L" q. f, X
' N6 s$ R# {$ c. r
A.AVG# A' b- D, O3 O% G$ g0 W! ~
B.SUM
1 L# R; m. {% U2 ZC.MIN. a3 H. g! _! R; u
D.MAX
# y3 Y8 q$ F- iE.CURRENT_DATE()- Q$ d7 Y5 P' ^1 ?* T1 y
. P- [, J  U3 h
3 b# P- I+ C2 V- ~. a. _
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?. @* O$ T5 i7 `1 R
) I3 y0 i8 N% s4 T: w1 R0 N5 T7 u
A.该字段必须有索引1 i/ k, U# ?) }8 r( {
B.该字段必须包括在GROUP BY条件中
8 L* T; h7 A; i  kC.该字段必须包含一个累积值8 j  K6 U; d/ G+ N
D.该字段必须是主键' M9 F) u( w# i+ R; u( b
E.该字段必须不能包含NULL值- @* I) J, ~8 G0 h/ H

- C% R0 G' u( _9 @  z0 A7 L
) @3 r7 y* z! w4 q14.以下查询输出什么?
0 g7 t5 Z! t1 C! d# ]& |/ g) G2 ^  _# s8 R; {
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2- C% T: {. H* }
ON TABLE1.ID <> TABLE2.ID+ K; D  Z$ d+ E; }, h' ~
" l, g  Q- [5 ~( h
A.TABLE1和TABLE2不相同的记录
7 w1 j. i, ]$ l+ x/ pB.两个表中相同的记录
1 e4 C. s. Z" l  C5 h8 yC.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数$ q, h* E0 L3 B+ |- X. x2 d
D.两表中不同记录的条数$ ]! W/ _+ v1 p
E.数字2" K' U! m# k9 x% K( Z) j
4 o8 z: ]2 B9 j" _; H: k

- f) X- D- R* [2 x15.______能保证一组SQL语句不受干扰的运行?
: ?- [' ~2 l0 y! W4 M0 e* C- @% U0 L! N8 Z2 E* j6 g4 u
答案:____________/ ^1 l0 m2 r8 M

( x- C2 v" {6 [$ H# J. L. H
* H, y0 L: s) X/ W1 A1 h$ \) \
/ g0 _1 U/ l$ \3 H8 T答案速查+ `! r8 p$ x0 N
1:BC8 f- B3 p7 M; d& M
2:WHERE7 @  j8 m: \0 i) O
3:B  K# b; M3 @! l
4:E
2 l5 _6 M; W) D& A6 V5:BD
  R" x5 c5 b1 F( \/ ~+ }* R; n" }6:INSERT# N. k3 n6 |# t
7:C
( t+ c  k7 `, @* T- H, `8:A! }8 q9 d. x/ a# ?% g/ S
9:C
- N+ [1 [, D7 @& t* P, b( U10:E
: _0 J* ~8 l$ ]) {" ^11:C
2 s( i3 G/ g, p' u& h: k12:E* l" Y: {# V$ H
13:BC) g1 v6 S. H( K+ b
14:C  j1 i* w& t% O( C
15:事务
% h* z8 ^' [, m# h5 p, P$ D
: B- \; O7 D2 a0 W5 \3 R1 @- |+ W3 E0 ^# \. w, Z4 m

1 P! Y: u9 j2 M/ _答案详解
' g) L) f& m6 V% w! f, t6 C( P& U8 }3 J
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
1 a2 p. F( T) C; y5 k
. b! K# K; u& C* x( u3 e2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
! D& O8 g6 ]+ b0 O. t' r4 p) K, c" n& G/ k, }9 o
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。/ y% f1 n7 [. a( s

/ N1 I" K6 [9 E, p1 w  v* G* s' x4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。  Q4 P) o5 c( c; P+ Y3 h: t! e

3 S3 k2 K$ }9 X6 W5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。
! c/ {+ E5 _' W
6 \+ t* P# O# R8 o6.答案显然是INSERT。5 Z# }+ D6 U1 l, m+ K

+ @8 \- e/ ]! f+ P; ?' U7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。; D( R' @) _; s* l4 T6 h' d% H
% c( g# q9 a  R. Y1 v' x
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。2 a. v' S5 B& R' v
/ y# `: |7 f( W, g  z
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。7 k& Q8 G5 `. |) x$ t5 |
$ Q( y! |5 ?- ?7 F. ~5 v( R
10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。3 _$ k) Y8 y. t+ [0 B6 h* }1 M+ j0 k
- }% d, J: M  F# c" }$ E
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
0 e7 D7 A5 |: ^- ~# A8 U2 s# O5 q' i
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
+ O3 p1 P5 e. D: a6 C6 E
9 N0 U) n; {8 ?. Q$ P# r13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。: G* ^9 E8 A3 j

) s8 Q8 x# B, H4 u: L- }14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。3 X8 J8 {: G9 F7 o$ j9 K
8 Y( K8 c. m* ^: |1 E
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。




欢迎光临 捌玖网络工作室 (http://www.89w.org/) Powered by Discuz! 7.2