返回列表 发帖

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
5 B- P9 [( e* D& i% LPHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
" ~, A- q" J0 X; U7 U本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。; s2 M% M2 Z  v. C; Q6 h& \" [8 b
: p3 z. C$ n' ?7 V) A" z

: `$ m: v: E' `  M: J/ X问题
$ N2 P3 K1 O! X2 ~8 ^: T" T$ I
7 H& J+ U  R. R' s1 R  P5 O% R: }1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)
4 x, U2 x( Q$ u: Q( N1 H) z, l: J6 _; Q
SELECT * FROM MY_TABLE
9 T' q, p5 l' O. b( w  r
. L% ~- k$ P+ ]- H. ]1 L: GA.如果可能,用把查询转换成存储例程2 j1 K; A7 o! Y* I' y& c8 c
B.如果程序允许,给查询指定返回记录的范围
2 s( s/ \; U/ w) h4 g3 j: p1 \3 qC.如果可能,添加where条件0 ^. d- t& C2 D& T! F
D.如果DBMS允许,把查询转换成视图
8 Z3 ]: k6 d1 L" p1 xE.如果DBMS允许,使用事先准备好的语句: ~! B: K7 j/ c6 Y7 l

! t, ?% H, F1 f0 |  F7 g. Q( T* w+ p/ ?1 r! p+ d/ j% S  F
2.可以用添加______条件的方式对查询返回的数据集进行过滤?
8 }* N) ^5 b! h8 U8 s& G* p9 E0 T
7 N* r5 a$ _! l答案:____________; s1 Y. V% v0 H7 A  q) \& J! G

* U8 I( G( e/ j1 V5 G- X
$ L) C; O$ A8 Y0 F, J9 T" Q3.内关联(inner join)是用来做什么的?
, ^0 c$ c; p6 Z6 ~- _! r8 {
0 J6 K- Y; z& a/ aA.把两个表通过相同字段关联入一张持久的表中
7 t9 I- H% ]0 R  {B.创建基于两个表中相同相同行的结果集
5 A- r9 e, U/ V, pC.创建基于一个表中的记录的数据集7 k! v3 q. P" [' F# K* s( c0 {
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集5 T1 @. K8 L- [; `8 m$ X8 ]3 O
E.以上都不对
- t" @% ^8 s: b& x) R; i1 }0 v) c
; K: m3 t0 d& L6 U4 F+ q+ Q" Z, o9 f6 J, V
4.以下哪个DBMS没有PHP扩展库?
; W: ~$ N- z; W" G' Z: z( O; d' d* B' d
A.MySQL
2 l' x! t2 n6 k1 a: BB.IBM DB/2
8 @* P/ _8 E" ~: nC.PostgreSQL
1 s! y. r/ \1 _6 ]- J' O  G2 }D.Microsoft SQL Server; j: _. _# w# v3 H6 B) f) |
E.以上都不对
: ^& B$ M+ \1 T  F/ V5 P7 x) P' A* A" z; M" r8 d
6 Q$ t' _6 _- _5 [- n
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)$ @9 }! P4 h* s( G7 M

, p: g1 H1 O' Q" a3 R3 q<?php
5 ^$ O' z' [8 F  R! z- P$ U$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
+ d0 {* X8 {( T! }+ ]- u+ I4 M?>5 R% A/ N6 t+ L/ \3 q$ d

2 Q8 S& ^* x. H& i1 X; I2 ~  VA.MYTABLE表中的记录超过1条4 }: [3 w0 r8 S! b$ @2 W+ _& F, t; ~
B.用户输入的数据需要经过适当的转义和过滤3 q  y" O4 M: i+ l* H0 q  E! Y
C.调用该函数将产生一个包含了其他记录条数的记录
" S$ b' _) ^) P# u# {7 }: jD.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
8 L  C, t% y( i, A1 n8 LE.查询语句中应该包含数据库名8 X& Y+ g3 j" _3 P8 `8 U
  @9 D" l; t0 m* J: m+ O
0 i" ?2 t7 O9 q
6.______语句能用来向已存在的表中添加新的记录。5 V. d- p+ c, X0 A' m
+ p* H0 g7 H$ v: p/ w' o9 g# R
答案:____________
$ x/ ?4 u6 ?1 S7 [/ \8 i. ^8 b3 q$ H1 o. g  Q" ?

, @5 y9 T8 T5 Q3 g3 a/ I5 H/ m3 E7.以下哪个说法正确?
0 t! S% d3 L3 T( m0 P
$ V+ g  E7 g8 s% Z) o2 IA.使用索引能加快插入数据的速度5 j5 e: B* T+ f% ~0 [. \
B.良好的索引策略有助于防止跨站攻击
" j3 }/ }* B/ xC.应当根据数据库的实际应用按理设计索引: Y. I8 ]. {- q; D) H
D.删除一条记录将导致整个表的索引被破坏
1 A* w0 M: F2 F. T! W  _E.只有数字记录行需要索引" }0 P* Y" m. o3 l

& m0 h1 |+ `6 `; f+ g7 v1 d7 c
' o) A; `; ]& O& G& ~$ ~3 D8.join能否被嵌套?/ S# r8 G- [7 J/ {. o

) P, k3 k/ i. C2 p$ _: DA.能
" ^+ J$ @. c' w9 ]$ x' n$ F& OB.不能9 X% g- n. M8 l6 Q+ e7 x# }. [& s
3 [) O6 y* |2 n; ]2 p

- P5 b: ~' T+ H2 g( F1 ]0 u$ T5 E9.考虑如下数据表和查询。如何添加索引能提高查询速度?
: d, ]2 {0 s' |2 C3 D2 t. N" F2 ~1 {* U0 Y' _+ [! C" U
CREATE TABLE MYTABLE (3 C' z& y# ?  k* x3 ~
ID INT,0 t' J- }& S- G* U
NAME VARCHAR (100),8 V. Q* U" g/ I2 J8 Q  ]/ e' f
ADDRESS1 VARCHAR (100),
3 k* C' _1 b; G' T5 f6 P/ K. aADDRESS2 VARCHAR (100),
4 t$ N* G$ q2 K; RZIPCODE VARCHAR (10),
$ \  i; H' g4 k1 [CITY VARCHAR (50),1 ?; M) {4 c* w
PROVINCE VARCHAR (2)! z; v, [$ Y$ m8 @, `7 X$ M
)
7 q( W1 ]6 ]: ?0 ?- oSELECT ID, VARCHAR
! G! _: s: X! i6 [# `. t2 a; `FROM MYTABLE. R. ^. J% a  W3 w2 r. c/ k
WHERE ID BETWEEN 0 AND 100
1 Z- {% L3 q& T2 _4 IORDER BY NAME, ZIPCODE
! u/ u, D; f8 d8 b/ m/ \
& h* r/ V. W! t. m" JA.给ID添加索引5 ?5 x3 [; k! H( h  n: j$ |2 b
B.给NAME和ADDRESS1添加索引# I$ ?- h% P7 D& H. O
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引. k3 m# U2 U! G& a# |9 z$ Z) r
D.给ZIPCODE和NAME添加索引
5 r, {7 U4 l* y' E  {9 e+ e; gE.给ZIPCODE添加全文检索
% l6 R  _5 A. Q* a
' D0 _. B; M) r7 m& f2 }3 [- m% [
4 P. h" z, x# ^4 J, L) D10.执行以下SQL语句后将发生什么?
6 e9 L# J: S% D9 N# P
; I- d& Q! t! c8 YBEGIN TRANSACTION, \  d0 v8 k6 V4 W. e4 U
DELETE FROM MYTABLE WHERE ID=1; x2 G8 t) X  y$ [
DELETE FROM OTHERTABLE5 V* b8 [7 \& ~0 t# h, n
ROLLBACK TRANSACTION
0 ~! S3 d! t# ^" @
; U4 o7 r! s, FA.OTHERTABLE中的内容将被删除& ]7 ?6 Q! O1 J* _( {  ?: a
B.OTHERTABLE和MYTABLE中的内容都会被删除- U1 d- K% c5 h
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
8 a: X! A: v4 A4 Z4 vD.数据库对于执行这个语句的用户以外的起来用户来说,没有变化$ B) c3 m1 E% E/ p0 V
E.数据库没用变化/ g8 O$ i5 U( i1 ^# l8 z# J
; U3 `5 j& `9 s3 l$ s' Z. [
$ @9 l2 Z* d3 Q8 ~  c# B0 ^
11.DESC在这个查询中起什么作用?1 w0 @+ T. W* Z. Q" Z
6 |  X- F* s+ o  @; F6 `' @% U
SELECT *( L2 G, f* B6 M2 S- |5 C8 f
FROM MY_TABLE
; v$ N3 V0 A) e7 l# K+ p. YWHERE ID > 0/ K+ C8 Y* }4 S
ORDER BY ID, NAME DESC7 M0 N  c' B3 _# \7 P) p
! z9 M7 h* `# G8 d: r
A.返回的数据集倒序排列8 m( F& {& {2 n: W7 p  ?
B.ID相同的记录按NAME升序排列7 X3 n; |4 [; e
C.ID相同的记录按NAME倒序排列8 P1 K8 ~# E3 H9 n5 B+ h/ R1 [
D.返回的记录先按NAME排序,再安ID排序
* i/ R/ a+ S0 ME.结果集中包含对NAME字段的描述
4 J' r+ B7 D7 a# ~* e: B) l* u3 H! _7 b  r
; m8 N  d% I5 L7 r
12.以下哪个不是SQL函数?
7 e9 U) A2 ]! v2 l# j" \: D4 W! `8 M1 S: Y" V
A.AVG
$ M4 }0 N7 k/ |1 HB.SUM& w: Z! l. H( H7 \1 c, v" K
C.MIN3 H, z' l6 i6 b8 B
D.MAX
7 v8 v# d+ V; V9 x: @3 ?E.CURRENT_DATE()
1 K: M: d& l& G& F  q
- ^" B$ o" j: \' W/ d- i; c9 n7 f2 U) H' G7 g
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?2 L, u2 k; y+ d2 u/ W
/ G* ?4 }. o- k' Z+ s$ b
A.该字段必须有索引7 F% V7 g) M1 f1 B8 t2 Z
B.该字段必须包括在GROUP BY条件中
$ \9 r- ^+ H! x; \' W! t& LC.该字段必须包含一个累积值4 r5 R7 F! ]9 T6 t+ A8 z) {. M
D.该字段必须是主键) E8 X$ ^  S' _# k3 L6 d7 H) |
E.该字段必须不能包含NULL值
* W) N$ t3 V5 P& g, H; p5 X# E# F8 i( {  Y" J9 `9 W" @2 M

- W' S9 A9 P7 s2 d# `2 t9 N14.以下查询输出什么?
0 ?: e" d1 L+ W! F1 F' w  h( ^3 c% n# W) ]+ U7 a' o4 T
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
, `3 f" V. X; t7 }* ZON TABLE1.ID <> TABLE2.ID* k8 [3 ~* l" O& z, r, M
  h) Y# A5 y3 p, S! B
A.TABLE1和TABLE2不相同的记录
5 y3 D$ A3 y+ \# @B.两个表中相同的记录
! ~7 S* F6 U/ ?( Z' iC.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
0 W: z, m2 D& M) a7 lD.两表中不同记录的条数0 |: X' o, t! h" h
E.数字2
, W/ l; i2 P& Y$ H) h
2 s; h4 {1 e$ T* K& D
+ G& I9 }, c# ]" E; ^! X: P15.______能保证一组SQL语句不受干扰的运行?; ^9 c- I" K/ S& P- j
# ]' s! ]: Z% ?5 @7 I3 }  |  _
答案:____________
3 Q: H' I, c/ N' r5 L2 _6 c  ], i! d% R2 Y3 r2 a( X
4 f- L6 b& [: S/ u: l

* A7 ]( ?) m* Q0 J, Y7 C" v2 S答案速查
# i% L) m( e3 v0 Q7 ]8 s; l1:BC
9 C+ I; a& d$ i# e  X, c( }4 P' E2:WHERE
+ _, G( b! S: l  S- y: G: P/ P3:B* \( M. G* C7 a4 c7 T5 t' \3 f
4:E
$ U$ |8 _* ^5 {8 e4 `1 @0 K5:BD
$ Q0 |' B. q; f- r: W6:INSERT
1 p6 x3 ?3 F/ E# b/ D8 L* c7:C/ R/ X* [5 p- B+ A% }4 c
8:A9 B, f0 T' w% g
9:C
4 C2 e5 F6 `4 j10:E
1 ~& ?8 x! a  d, z5 [; b, I11:C6 @: v  D; g: G9 G6 H* q6 w9 x
12:E
7 K" \/ {3 I3 e- F) q13:BC1 r* ~+ k' S! R* E
14:C
# [' u# q8 `1 w9 ]1 i" {3 O2 U9 ~( M15:事务
* Y/ l7 s' h5 l4 @2 |; H2 Z$ _3 L2 |1 K  q( Y

4 [* n' e: }' K: g
& X2 b* z9 x; S) j+ O) W" `( r答案详解& W, c6 K! `  [' g/ O" H" j( m* ?) v

7 K! t/ J# G* w! E/ f9 F1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。  @+ d! m. K. j

( ~7 P* E! J+ p6 c% [2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。# h  i+ w  Y0 C! ~: E; A
9 R3 z. u6 y# @) x' r/ c# U
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。$ a# i( i( r# b6 ?

$ b5 e. m! B: ~5 T" M9 u4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。$ @& i5 Q9 o) L* [2 O1 O; t0 _

" [- _7 `- ?2 p( j: Q5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。
( q8 S; W9 d1 q$ F
% i5 Q4 z5 T' u( h5 Q6.答案显然是INSERT。
6 }, d- l' [9 c( S9 S7 g: u1 j  Q" R* c/ V+ p+ b; o$ ^9 V( N  M
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。  k2 r8 R$ h' \9 S" W/ H7 c% N- |
/ [2 W1 q9 U$ Y
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。! }& t/ g! {8 v. j( l) b
1 `* c- E" t8 j
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
# J2 Z; l9 U% j3 O1 i6 l( ~
3 V9 |4 j- k7 ~3 F2 t" k4 n. b+ }10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。+ {; G& s: ?# X2 z/ q* s8 e

, n) ^$ L# ~" K- q8 d% |# T: Y11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
9 X0 D* X1 l' t3 a- y  _" ^9 [7 ?/ c# A+ ^6 M9 a
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。6 x) M5 {4 |& K, I

; d, j! l0 |8 H6 k- G13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。8 i6 O4 X& L4 r1 d( x! U4 v! ]/ C
3 Q5 U# D0 B% ?: d" P3 f; x
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。; B5 M9 o" w1 o6 w

# i7 C! e. `# f7 L2 M15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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