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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
6 l% j- e* ~/ B$ vPHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。$ E: y" [  N( Y) w
本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
( j$ U6 g- Q. s2 I2 B$ X8 I- B3 E& L* b0 A* w) I
/ W& P$ v2 F" l
问题# R% b# y( ?- l

3 u0 _8 M6 a- I" w+ g1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)
0 ?: S/ g3 C; f* }2 k) f
( ~6 y' b2 Z9 dSELECT * FROM MY_TABLE* r% X! |+ K, f# J6 O

6 D+ X2 k2 I2 n. }, w  r3 GA.如果可能,用把查询转换成存储例程
$ O1 T4 g9 W7 Q& C# R  GB.如果程序允许,给查询指定返回记录的范围
9 E! p! [, p' `6 o5 e( R2 f1 ]C.如果可能,添加where条件
" r- b) F- E" H9 H) T' ~D.如果DBMS允许,把查询转换成视图
. G! E2 S/ q' |5 ]. {% U  m/ _E.如果DBMS允许,使用事先准备好的语句
9 D6 @+ w/ a/ o4 @" w
8 Y2 @: H9 B! s" x, ?: C" @' v9 Q4 s- o( H& D3 B" ^, h) R2 ?" R
2.可以用添加______条件的方式对查询返回的数据集进行过滤?2 R$ d0 e, P# c" u
& L7 V5 i5 ~" h' h2 _5 J
答案:____________$ V1 A* A6 _7 a1 P

( [; p( @. D  |  k0 `1 }# H4 j6 t! a1 R, u/ l7 W4 r
3.内关联(inner join)是用来做什么的?+ D- j5 ]* K. c/ f: _
% E3 X" z9 J" U7 z5 P+ ~6 {& P4 _' ]
A.把两个表通过相同字段关联入一张持久的表中
2 W; B8 _2 U) @9 R/ f" S: NB.创建基于两个表中相同相同行的结果集
8 f$ p- |% n3 R" DC.创建基于一个表中的记录的数据集
+ H( h( {" E5 h, V' m( dD.创建一个包含两个表中相同记录和一个表中全部记录的结果集
+ ^7 n* T( U; H3 a+ z& }: rE.以上都不对. y: b' T0 l) o  J
  X! v7 `3 i  D: l

: S" q8 ^' [7 l. R9 j4.以下哪个DBMS没有PHP扩展库?5 I3 M& O0 l" {7 K6 T

9 j) H) u3 B; x1 lA.MySQL0 y/ e% a6 _1 K
B.IBM DB/2
5 {# f( t  S3 l9 s' G' eC.PostgreSQL  y. {, r& z0 o4 R5 I6 ]
D.Microsoft SQL Server0 O& z1 u$ H( P$ k0 |" M& ~
E.以上都不对* ]. _; T, r/ @- x
" l$ Z# _4 N. }' U: a
9 }3 @0 j% x1 u+ F7 w& |
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)  I9 b9 G+ L2 n- f

! B3 |9 g, Y; w' V( P; ^<?php
  i. o1 q9 ~% Q3 c/ h% A, h1 V) F: g) C$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
) P2 M3 E0 Y; ?; ^8 a0 V?>
7 v3 s' ~. e; t8 y7 ^! v4 K/ B8 G  ^( P/ s8 j
A.MYTABLE表中的记录超过1条
( k; q, A. B" i! {2 {B.用户输入的数据需要经过适当的转义和过滤! s  \9 ]5 y' ?
C.调用该函数将产生一个包含了其他记录条数的记录$ J- H3 E" J- @4 d3 h& D
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除1 N; a# T5 ]  x) Q8 g1 u/ F
E.查询语句中应该包含数据库名
+ T! I& U* G+ a" ?& a7 d* o& P% w7 C  R5 ]
: K+ v3 F- z: M$ T% ]4 |
6.______语句能用来向已存在的表中添加新的记录。
! F6 O" {, U" |( A
- x0 [+ E. u$ O+ u! t4 m答案:____________" ~  f+ c2 b% U3 I

+ k3 K' @7 }, j
& J1 L, c8 Q% h  Q, ~5 V! m7.以下哪个说法正确?
& w, L, I: e: I% d6 U2 e( ^3 h; \7 P9 \4 l4 c7 {; m  s
A.使用索引能加快插入数据的速度! W5 ~  [7 X0 u" s& n. f; g7 [- i* e& R
B.良好的索引策略有助于防止跨站攻击8 C0 K* r! k( ]
C.应当根据数据库的实际应用按理设计索引* B) q4 f, ]! h# T3 _
D.删除一条记录将导致整个表的索引被破坏; t4 Q/ [6 Z7 W& e
E.只有数字记录行需要索引. F# d& u& z! l9 U" A
. `/ A  n$ Q) H, M; B3 R
/ |) \) `) {* x# Y0 z# D3 G
8.join能否被嵌套?
# d+ T" m7 u& e* }2 ]; H0 _: }9 T' Z4 }6 N
A.能' h1 e: m$ e* @$ ^# v1 m& x: i0 w  c$ K
B.不能
8 l% x; l2 P# n
0 G; l* l9 d4 N5 S0 h
6 e. O2 J5 a: r/ e9.考虑如下数据表和查询。如何添加索引能提高查询速度?1 y" D0 {2 L! s$ O7 u( h
7 ]4 ~0 ?4 x+ ^# {' ]$ H8 t
CREATE TABLE MYTABLE (3 o( i- I- _6 e6 X
ID INT,: v% E  ?# |- e' @) @5 P2 W
NAME VARCHAR (100),
  A7 ?5 n8 z' y; ~; a3 {" M; OADDRESS1 VARCHAR (100),
# M6 g* i& ^1 y& V$ g; jADDRESS2 VARCHAR (100),
) W# r( x% B# t; W. Z5 i* ?; s$ TZIPCODE VARCHAR (10),
, \3 D6 J- [' I: ^8 o5 [CITY VARCHAR (50),! t3 {& a" `: Z6 @0 ?
PROVINCE VARCHAR (2)* O# H" {- p+ n/ U
)" C) x: D8 S. _8 n+ z3 \9 l
SELECT ID, VARCHAR
2 w* M$ \3 g& T0 Z2 ?$ r5 RFROM MYTABLE2 ^% E6 d2 J) A, [9 d: U1 N( K
WHERE ID BETWEEN 0 AND 100* L$ P* j6 V3 P; P
ORDER BY NAME, ZIPCODE) J. f+ h5 v! J* ^1 Z  {: h
. ^! _* f7 W3 I+ A# r
A.给ID添加索引
  Q9 z" }- n2 e- m7 u' KB.给NAME和ADDRESS1添加索引
  K* C5 @' q& VC.给ID添加索引,然后给NAME和ZIPCODE分别添加索引9 Y+ k; P: {+ C% w/ H! h  V1 a
D.给ZIPCODE和NAME添加索引
* Q# m' u, a. i# iE.给ZIPCODE添加全文检索' X2 k7 {, N: U5 \9 D
4 B! Q7 j+ k$ ?1 Q7 m0 P
& e  \0 @0 G. K) a$ P( K1 I
10.执行以下SQL语句后将发生什么?
  d! }* t# s' I& W1 O  N3 [! Y: c/ y, S2 H, T
BEGIN TRANSACTION+ Q1 p6 \+ C  Q4 _" p, C; i
DELETE FROM MYTABLE WHERE ID=1
; t( W8 {  V0 V* B6 GDELETE FROM OTHERTABLE
) U" d: Z; e9 Q5 x$ H1 MROLLBACK TRANSACTION2 [7 s& p( r: ?. V7 z
6 i1 P2 x6 d2 t1 C- Q3 `
A.OTHERTABLE中的内容将被删除5 C; c5 e0 J+ s3 h7 t
B.OTHERTABLE和MYTABLE中的内容都会被删除) T, j  g' @  F3 h
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
8 J0 s5 @1 e3 U& i/ R, C! F3 PD.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
( w0 C( m9 b% N& t7 _  K  fE.数据库没用变化
5 ^1 q, t( Z: Q6 B& |. }8 \* E, @' F. x/ s, E8 n; v% ?

* k: E' a; B6 g7 S# o4 U  }11.DESC在这个查询中起什么作用?0 ^8 k9 T3 B" j9 n# o
. y! V# v5 s1 S3 m# E8 m2 h
SELECT *
0 T9 w9 f( a4 i; x! r! ]FROM MY_TABLE
# J  b1 }. B4 {! v* [4 UWHERE ID > 0
" g1 }: M7 A# S: G! @" R% q+ MORDER BY ID, NAME DESC8 R+ B$ C( c" _/ }' W9 l* w2 Q  h) N

: z  L  s+ n  m* B- d" X6 OA.返回的数据集倒序排列
8 [. w) _( U7 b8 jB.ID相同的记录按NAME升序排列
0 k' ]& B+ {( y& C. k$ x' p. g4 sC.ID相同的记录按NAME倒序排列8 G* I$ g0 s' ~5 Y; \/ ~
D.返回的记录先按NAME排序,再安ID排序
, Z# u' Y/ F9 o- q* \8 P) v$ sE.结果集中包含对NAME字段的描述9 t# B* i# x7 ^2 p. n+ Z# P( L9 B0 R
( h) E' k1 g9 l* h6 N

- q) w; B9 q& O5 K12.以下哪个不是SQL函数?
* x8 X* z9 |2 m
$ ?5 h: {6 A( Z2 yA.AVG* e( @, O( p$ {; N
B.SUM9 r$ ~3 Y8 N/ k' e' J
C.MIN
. u. }- R- w, e' `7 v8 S0 xD.MAX
% m( [& P- l' j9 TE.CURRENT_DATE()
" U7 e5 d3 F- o; c4 {, a
2 {" g: E6 u4 f3 Z8 K) z
% S; |/ v  w! @) g/ l$ J13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?0 D0 `" R! ]# E" ]! v: V1 w- v  a. C
) s+ x: B3 D% i$ k# X/ z9 E' J
A.该字段必须有索引/ A  {- @7 M: Y7 y9 ?9 ~" J
B.该字段必须包括在GROUP BY条件中* B: B; Y& U0 f# U( U# H
C.该字段必须包含一个累积值2 g; u: I9 ^4 [; W
D.该字段必须是主键
9 |& t( x! B* B3 m  aE.该字段必须不能包含NULL值
  h/ k1 Z. H/ J& P' p6 [/ ^; Q' H0 V2 ^0 T
: a3 d- L2 m2 s7 W+ A# _5 n1 ^- ?, q
14.以下查询输出什么?" ~% ~- x1 l) B
, v& g9 |% q2 {* [8 F* t0 B. F6 P
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE21 Q! M5 }- Y# Q
ON TABLE1.ID <> TABLE2.ID  N1 u% f  V$ c$ o
9 f3 X! U+ U4 o( P
A.TABLE1和TABLE2不相同的记录9 o+ Q  v0 Z/ I
B.两个表中相同的记录8 A1 ]8 t$ |6 @/ c* U( s9 c: b
C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
4 O8 a. u9 |, }, Z% UD.两表中不同记录的条数
6 I* U0 T+ b# @" e0 GE.数字2
  ?0 n# i5 L) H7 Q- P" ~! L* [7 U5 w9 K1 x
6 P/ P" E8 h( _
15.______能保证一组SQL语句不受干扰的运行?2 [" g5 `, ~( G' n4 D

( G7 b" Y4 d' b/ t答案:____________
0 Y4 M. d/ }# Y  [2 r5 p
5 [9 P6 P; M. a# }" ]5 V5 [3 F! J: E# Z& Q4 b2 B

* y5 X* @# ?, Q% n7 c答案速查. P* `' Z$ a8 i- C/ `2 U
1:BC5 k6 n0 @$ s- t+ N1 k  J" x
2:WHERE& O- r6 p) J2 u4 J  h
3:B# I8 @  U/ h& G) P+ n
4:E
" B8 v; l' z  U  ]1 Q5:BD
0 @' y  q  N3 U5 o5 ?$ ?2 f) ]0 W6:INSERT/ H2 {' `- V" V4 G3 v: r% U
7:C( D, w1 E2 _: k; X
8:A
5 y8 J( `( C7 d8 d7 F9:C
, L; ^2 a0 \6 Z9 X* u10:E3 Y+ a+ J/ P: X0 \1 G% G4 ?
11:C
- ?% Z+ W# n0 q2 B; ?12:E
9 d+ @( {3 P3 w3 K- ?/ X13:BC& ~$ W# d1 H: K
14:C4 M, ?) h1 T( d# n
15:事务
& l9 m2 f8 Q" F* }
( V: h3 b/ p3 i" L. f' x; a' p) R7 [( m

$ c! g* b  G6 ~* `答案详解" r5 l9 F! M- m1 m3 `9 Q# R+ U
4 H  D. f# e9 Y) P$ g5 V/ ~/ D
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。! g& y: G8 c+ h9 l4 E+ F; j( \4 O
7 r1 q/ _# t& A8 K8 F
2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。8 R) R2 O7 P' x
6 P8 y% n+ b% f' E
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。
/ @% ~8 v9 L. l0 y) b$ R8 R/ }" k8 g) Y" v; ^3 z
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
% s* F5 T# p; j4 \$ w; y
  F7 a" w6 }: \: a& r5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。
. T+ c1 g& T6 c- a7 s( ]1 n; k0 y& {# P* a4 W
6.答案显然是INSERT。
7 k% d3 g7 \; W/ B- B
6 U1 o0 s) M! C1 b8 H; \! z7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。  D( {2 |2 C1 g& ?: V

, U3 g8 K& u: j$ ?8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
* C' Z) \6 u' y& w! [+ ], f. I5 s  [+ ?: h; W3 u' T
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。0 j9 z- Q+ R3 K

3 @$ I0 ~% D6 R6 I" j10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
. b' F0 Q+ G8 h) I1 u  ]- L4 G+ R
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。+ N' \4 ]' a6 c% G

- n) [7 H( e. h$ u& z$ @12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
. j/ W! i2 G9 I
: F2 e2 P4 L1 N- x& |13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
* i4 i1 }7 D' d' w0 U. S1 n7 q$ c, C5 v8 K9 A6 L6 W1 C
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。, x% `( ]/ I- E( F% z2 g
: k* L; V/ e, s& ^2 }
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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