返回列表 发帖

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
/ U! L# ^7 j. k2 T7 \PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
8 k; C* U" G4 i4 M$ p本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
) \' s+ d# g5 U+ y$ E+ g
6 p5 @5 m6 o; Y# B# N0 S& S6 ]" X
问题
/ R/ @& Q) q% R
* K# C/ i' u5 l- D: [8 Z! h1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选). r. W, E4 p0 x7 N, @
  l$ E8 `0 O% }' y3 _0 ^# ]: g
SELECT * FROM MY_TABLE
# T' _7 K9 s' R2 \  T$ j. `/ p' N, c) I. X2 W
A.如果可能,用把查询转换成存储例程4 L( D+ w8 n9 ~( F3 S
B.如果程序允许,给查询指定返回记录的范围
! w7 ?$ I% O: T: U+ U. X, q# q- MC.如果可能,添加where条件
* N) d$ d& ?2 U( ~. D, yD.如果DBMS允许,把查询转换成视图2 t" x3 k  p) y0 O4 q
E.如果DBMS允许,使用事先准备好的语句) C! r  |5 [7 Q1 Y' F. m; ~

9 F9 D( ^; a* p9 A: G. X
0 y3 j$ `" U! h- V- S2.可以用添加______条件的方式对查询返回的数据集进行过滤?2 r. |0 w4 @4 |1 ]. b, i" N
' Z4 I6 r9 p! r3 N2 q" F0 B
答案:____________, Z: F+ G. v5 I+ F/ X

5 {1 ~0 q8 c) @  Y" ?6 w. M; e$ S7 v3 ^3 R( X! _0 v- N' X
3.内关联(inner join)是用来做什么的?( L! E, ^% |6 n
0 A5 h2 f" c1 ?, ?/ O/ i
A.把两个表通过相同字段关联入一张持久的表中
" W* S7 D3 G$ A, w- F9 |B.创建基于两个表中相同相同行的结果集
- d" j; Y* L% h" }/ Z: G3 R5 DC.创建基于一个表中的记录的数据集4 k. ~% Q0 A# f+ U; ~- X
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集. g/ R+ d" R0 y" z% G2 v" {
E.以上都不对4 J5 T4 T; \, H, c  @1 b
7 j+ O* X; ^  j, R8 Z6 Z

6 }6 r' q9 f& h0 {1 r/ ~4.以下哪个DBMS没有PHP扩展库?
. i4 }1 Y  U. c: a, h
! C! B3 I) Y# dA.MySQL+ ~1 \; C: H- `/ \
B.IBM DB/2/ w0 p  P, e5 k( l% }) U
C.PostgreSQL+ L# q) r) q$ c& a
D.Microsoft SQL Server$ |- k& S8 X% u' e% @
E.以上都不对
; \4 w+ y  l( l# l. ?  [' O% k+ |$ o, t( G" C% L
9 s# ~0 X. G1 J7 b) x% x
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
4 |; e! \. b. T) v* y  W: y, d, D# ~" E" l! W1 X" B3 i$ b& h; A" ^
<?php
  b( i, `, S. e) I$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);2 a4 }6 f- e- J& q, P2 q
?>
/ z: p" A, F* i6 m' F6 o# J4 p$ E9 x
9 s* M* U5 X5 Y: W4 v& s2 |A.MYTABLE表中的记录超过1条
4 z& ~1 m0 h' sB.用户输入的数据需要经过适当的转义和过滤% [' J5 h# y; W& v7 n; Z/ U
C.调用该函数将产生一个包含了其他记录条数的记录9 W8 `! b# U. W/ y  P
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
+ W! C* [7 R1 U, h% y# f7 sE.查询语句中应该包含数据库名4 y% o, \. F! ^: K+ ?) u$ @
$ }- `' k' s0 ?6 i! q/ i
" F% k* v; Z) v& P& @$ X
6.______语句能用来向已存在的表中添加新的记录。
6 x2 o3 b# i+ n4 y8 S- l8 F
: `% P/ ~* K* j* Z! B" p* ]答案:____________& K) Y& H. Z9 M  [. P( w- q

/ W7 k: y9 L2 Z# T# Z9 [! \0 ^3 q3 ~* ?0 x9 L1 H/ v$ \4 d' T5 r4 c9 O
7.以下哪个说法正确?1 R% a5 m, N5 c

0 L3 g; J* a5 LA.使用索引能加快插入数据的速度* y1 d3 w5 k1 {+ r7 h
B.良好的索引策略有助于防止跨站攻击+ k( l" B. |- s( D
C.应当根据数据库的实际应用按理设计索引0 r1 q' Y* u$ \3 Q7 \
D.删除一条记录将导致整个表的索引被破坏
7 s. S% s' b& ?7 \. ~6 c3 |$ ?; S! g% ~E.只有数字记录行需要索引
4 ~0 C" q" j; B* s$ z8 a, N
; k( q7 {8 F9 e& I. f9 W" d& E) f& J1 C, F
8.join能否被嵌套?
5 s& F. n$ Z* W
6 i/ E6 U: i. s0 P- zA.能( v& ^, B1 t! r0 g: X. G
B.不能0 b0 s3 I1 r+ \6 q4 W1 p  S' R

, _9 c; [' e" D3 M7 d( f$ [* j* |( {4 ^1 x9 H
9.考虑如下数据表和查询。如何添加索引能提高查询速度?
! T* M' s8 B8 S( C8 _. }" m
! e1 y% p  ^, X" u. ?9 UCREATE TABLE MYTABLE (
( [; z$ r  O/ C) ~) ~: Y+ \ID INT,
5 |, p/ y. i5 }" A" ?; H! jNAME VARCHAR (100),
! X) ]" ^- p( K: ?3 p# g, vADDRESS1 VARCHAR (100),! @( S1 X" |! b& F  p9 b% M
ADDRESS2 VARCHAR (100),3 z# f% w' M  \/ ^8 C
ZIPCODE VARCHAR (10),
( `$ g0 d7 a- J4 ]9 R$ FCITY VARCHAR (50),0 ?; n: c0 l; S' g" w
PROVINCE VARCHAR (2)4 O" g& r& m8 x. t
)+ _8 h; D9 X" ^- ^1 ^, V1 d
SELECT ID, VARCHAR
2 z# a2 B: J7 H7 [3 p8 YFROM MYTABLE+ Q1 c4 |* H, p
WHERE ID BETWEEN 0 AND 100
" \! Y4 `- s4 Z% b: e6 IORDER BY NAME, ZIPCODE
+ V( `9 {9 K1 O7 k& m; A; C: r. L$ T
A.给ID添加索引
% H) }8 C8 W. Y) p3 g; o  m+ R2 E% [B.给NAME和ADDRESS1添加索引( |/ y4 v/ _5 q+ M% m: x
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
( f; h* Y+ J2 sD.给ZIPCODE和NAME添加索引3 ]# V5 V% r& I, S
E.给ZIPCODE添加全文检索1 o8 l7 C  d) P. Z7 m* B- ^1 K

; v8 Y, C# ~/ E
6 S: [0 T6 B9 H8 w/ G3 J$ V  G10.执行以下SQL语句后将发生什么?
: m, u- f# X1 D9 h* [& |& o
4 F) B! k$ g$ oBEGIN TRANSACTION
5 H# G# ?7 q1 g0 ^% q4 A) j" _DELETE FROM MYTABLE WHERE ID=1& W5 E" N% {$ y7 y6 L7 ]. k
DELETE FROM OTHERTABLE
3 H0 S' Y; W$ m) UROLLBACK TRANSACTION$ e; q, Y9 _; C2 I+ L9 D
/ \6 \0 ?8 e6 d$ F" H) J' v. [* s5 k
A.OTHERTABLE中的内容将被删除8 }0 c- @3 n" R1 |5 D- t
B.OTHERTABLE和MYTABLE中的内容都会被删除& h+ Y( D9 z2 z, d# U
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除9 D# W4 l- X" h7 A: B. R1 f6 ]
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化1 k+ ]! a; z1 [3 K" P. `
E.数据库没用变化
! w4 f% {0 j- p6 _) ~" u& L/ _* \. I* `' f: [5 c9 P. i4 R
& U: |0 ]& U6 t& U+ O5 W
11.DESC在这个查询中起什么作用?' j3 Z6 l3 [8 U# f6 o) ~

$ y8 W) L  Y4 l5 |9 jSELECT */ h" Z" N, d, c* y+ ^' q# {& V( o8 d
FROM MY_TABLE
" L0 B  p/ q/ W" n4 z9 pWHERE ID > 0% v% G" H  m5 B8 L4 m
ORDER BY ID, NAME DESC4 I6 l8 }; b( j7 c/ Q- M% d
: i! |* {$ d  q& _' C+ l
A.返回的数据集倒序排列: U8 e; M/ Y  @
B.ID相同的记录按NAME升序排列7 x4 C+ t+ @/ E: ]
C.ID相同的记录按NAME倒序排列" i  u& {6 `, x% X3 o( i
D.返回的记录先按NAME排序,再安ID排序
+ U  Q2 t# u( w# `E.结果集中包含对NAME字段的描述4 o( @1 w. [+ ~. r# @. |% b2 u; m$ y0 g

8 P) m; D1 e; Q& \/ F4 s
0 j! _: O2 r. _12.以下哪个不是SQL函数?
8 ]4 S: ~  W( N; ]0 E, k- ?
. \4 g/ U+ ~2 O8 S% f; pA.AVG! y* z/ ^, A, v8 K+ B: `$ U! T' D
B.SUM
, I3 S3 t& R7 O3 mC.MIN
& `/ ?0 X! E9 q( r$ ED.MAX2 m# K0 W$ F: S1 p
E.CURRENT_DATE()
3 r; ]- k" e1 X% }& _$ |/ g2 Y& Z' X& u$ B- e! |) T& }3 Y2 O6 o

% ^3 {( h5 @& m& `13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
4 D- x5 P' v8 s* A" |/ [3 j4 \6 h; U' V: Z
A.该字段必须有索引; B' H& T5 b  t! G
B.该字段必须包括在GROUP BY条件中
5 O$ a6 I! t) |C.该字段必须包含一个累积值+ [8 `* S" t; A3 I: v4 ^
D.该字段必须是主键& q8 E) w1 Z! ^1 q3 p- K+ X
E.该字段必须不能包含NULL值
/ M0 S" a9 Y% n  O$ k* H" s% U: R5 s  ^2 I

8 W+ z8 f. q+ N* q$ D0 d14.以下查询输出什么?6 [; C: X/ ]' t, N1 i, N
' t! v1 r' `4 w1 K( `* P+ c
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2" P' {, `2 N0 \* }2 S- Q! u' m
ON TABLE1.ID <> TABLE2.ID8 _4 j0 v/ S, N7 p

- t  `0 k1 N7 a0 {, _* a! r( LA.TABLE1和TABLE2不相同的记录1 z1 }, Z! r7 H7 C/ d, H3 e
B.两个表中相同的记录
) \' V- O. o9 v1 H" UC.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数! M4 R: O0 o% C9 e  u
D.两表中不同记录的条数6 ^& e, \3 S$ k& i6 N/ \
E.数字2, ~" `7 r! Z7 b( n- Z

) c# f3 S: c( s0 C8 j* z( _9 [' ]5 ]$ {3 O# L9 V+ f% q
15.______能保证一组SQL语句不受干扰的运行?
6 M3 m- c3 t/ }- I6 x
* {1 ~/ N1 T- ^0 k# b5 a5 ~答案:____________
8 J: x1 r+ I, {
: A5 M+ Q6 H3 X: o% l9 [6 g
3 ~' \9 r( f8 j" D. ~0 a" q2 v# R+ v# b" z+ T
答案速查+ e8 E1 n) [6 e- \$ A  ^' k
1:BC5 M+ ~' m+ }5 l; R
2:WHERE2 F' O$ U+ \1 y
3:B
; F2 D8 l. S! A6 M4:E  v$ q, O" D8 Q( S+ Y
5:BD4 s( i+ h4 Y9 b2 y* s+ P
6:INSERT
7 z0 d" {1 ?0 _# P+ h4 ~! Y7:C, ?, n, Z8 x0 f/ i  j! ~
8:A
- N/ }, J% t  e+ v2 X" H9:C4 P( D8 g; c! j7 _9 z! G  Y; \! v
10:E
6 Y! |, B* H' o) F7 V" l2 q11:C+ X- }5 H# @) `2 q( i
12:E) |+ r3 `+ y) a. r* Q2 C
13:BC
7 o9 d+ _  P6 ]3 J8 I# G  h14:C0 E0 d, f3 }# _) R7 ^% v* t
15:事务
/ {) t& b+ k! O& H! J0 s: O6 `  U# H4 u7 R

- N1 ?+ R" N4 x* R+ X0 x2 Y6 C7 I5 C+ [9 A# G3 W+ ]* A# w0 k0 v
答案详解$ ~  G5 ?9 C3 j9 e8 R/ ?: ~. _, M0 H

0 t  ?0 z, k0 [& c* K# O1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
* N' t* `8 n3 j' l7 |# ^" u* c& l6 S: g( g8 _
2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。& E! K0 ^& L7 C8 I( E' _& r! U$ q
, l& y, g! r5 Y7 l/ X3 W& m) U
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。
3 o8 Z1 |4 i$ y5 `; W* R# `5 N9 P, m6 M' p  a  x
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
2 A8 l; f1 O9 Z5 O! z1 v# ]3 e% L% G/ t  P3 @
5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。6 f: W) G6 y8 z

8 V/ l5 F6 I/ @2 V+ Y- K6 s6.答案显然是INSERT。- J# ^$ _# ?( x* L

# e( i* }" ~' z7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
0 Q$ J# l) `* F6 w
) |9 n  f1 v/ f) _# C8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。- r5 i9 ]- A- B
) _3 ?6 I* ]6 H! f5 M' ^
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。, A9 a% f/ k. s6 a( R- ^

  Z/ j0 L$ X+ E+ e0 [. `" O. e6 m10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
' p2 H8 [  w0 ~9 Q# I" ?5 I* `4 i6 E* G6 z; M# I$ G0 z* E
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。- ^+ M6 A7 {* }4 \' h
: @' X8 F' B' S  e
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
. D) {0 s0 H; a# y
1 d4 q, |. L, g4 A6 ?3 Z& F: e4 t8 g13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
' E, `2 U- @4 d% o7 g( i& S. @. G% I* w" n! H
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。9 z/ j3 `2 h6 M

5 ^) ]/ L2 ^4 ~8 |& N8 ]2 T15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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