  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14191
- 金币
- 2386
- 威望
- 1647
- 贡献
- 1334
|
[Zend权威认证试题讲解]第九章 - PHP与数据库
如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
+ x% [! c, t" z+ n: J8 YPHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
$ A, L( a/ \' r# N6 P本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
) G8 O$ w* R/ u0 ?* Z, X% E. L" n# S
" t4 Z0 f$ _" Z4 X" k! P6 x7 i! U
问题8 T6 ~3 c# j- N5 j7 W% O
! v& ~# B/ [# k, W$ j' {: T# _0 ~& d1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)
- L7 @( x+ P: L+ l" L
* M6 Z4 c" D3 h" |0 _6 {/ QSELECT * FROM MY_TABLE T# J) m* h2 Q$ [8 K+ E7 ]
6 V7 x9 \: ]9 r( K- o4 y( b& XA.如果可能,用把查询转换成存储例程
4 [& T- L6 j/ c5 xB.如果程序允许,给查询指定返回记录的范围
4 m9 V0 `2 N8 e, X hC.如果可能,添加where条件' G2 B+ U/ V/ \9 k: W# x
D.如果DBMS允许,把查询转换成视图% \' H4 E7 I5 M. N9 }; H
E.如果DBMS允许,使用事先准备好的语句
5 E, M6 s$ l* }* x5 V) G% H6 m, V+ j- _0 G2 r
a2 H3 p( a/ j$ J' @( L* K
2.可以用添加______条件的方式对查询返回的数据集进行过滤?2 B K9 H1 j% b. \. u! G( i) d
; X1 {: U0 h2 m8 M
答案:____________" N/ k% s' Q2 H, m# S
& g: o, g9 z/ {1 n; `1 m6 z+ y% X3 o, M. w# h
3.内关联(inner join)是用来做什么的?
0 M9 e# U" ^0 \
O& [% r# h$ N6 g7 uA.把两个表通过相同字段关联入一张持久的表中
- K; Q2 q2 s7 |3 e7 D G+ a NB.创建基于两个表中相同相同行的结果集, ~1 C; a( U* N! W0 D$ J
C.创建基于一个表中的记录的数据集2 `/ L) T, e& c- |8 h
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集
" x3 N9 j Y4 I0 w0 Q! j4 uE.以上都不对
, c) e/ i. ^! K O, ?) H) s
( w& P+ h/ P: H" b3 I+ k' Q4 d2 z! L) g! \6 g) a/ l
4.以下哪个DBMS没有PHP扩展库?
& Y) o' X6 C* @: B- }/ c V0 I' B0 t! Q$ c$ E
A.MySQL
2 X2 C' }1 t' E2 ~# r1 |B.IBM DB/2) G9 k6 u3 f1 L2 w- V$ I
C.PostgreSQL3 U7 a) r# ^% g2 A1 s4 b
D.Microsoft SQL Server
8 p1 h. {5 S: k( BE.以上都不对5 d* t. ]8 U8 b! o/ H* m- o. O& M
1 f. N8 | P# d6 {6 V, C
\9 U6 V/ [8 j4 s, N( ?5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
) h7 g2 ~ F& `
) C$ H7 Y- G' D* @<?php
5 u, E' W; {3 x' n& F$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);! Q5 o' [! W7 n r
?>( o" v& {2 W2 z( s" M) L
( r7 Z, e9 \9 c+ j) K8 k( j
A.MYTABLE表中的记录超过1条
4 E0 D" O) J! k3 Z% dB.用户输入的数据需要经过适当的转义和过滤
! A7 C7 p& d8 P1 WC.调用该函数将产生一个包含了其他记录条数的记录
1 E. Y9 I1 `7 fD.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除0 \; ?2 V3 X( Q3 Y3 r
E.查询语句中应该包含数据库名* a- V4 E1 R/ J& w, u4 O' O% }
8 P4 `8 \" m& ?
7 n6 h" E @7 e6.______语句能用来向已存在的表中添加新的记录。
" K/ A5 t# b; M7 n6 Z4 J( I
1 D) n- P; ~. A+ z答案:____________( d. R+ w& v6 l$ C0 T8 y
3 Z. l: O! c$ k: t4 W, U0 a, F" u( p+ F- E
7.以下哪个说法正确?6 j+ g& Y' d9 T& P( {: t, d
% q# X+ l8 O; `: ~
A.使用索引能加快插入数据的速度
5 t0 ]1 O5 x+ X! TB.良好的索引策略有助于防止跨站攻击$ s. u9 `' a. c$ g. B E1 c* I
C.应当根据数据库的实际应用按理设计索引) D) ]5 [( Q8 L" b' y( E
D.删除一条记录将导致整个表的索引被破坏& Q& R, F3 a4 C/ e+ E
E.只有数字记录行需要索引4 y5 p2 o8 {: m" V' k" M- |, e
) a) ?4 h' v8 _% m! h
& M+ B) [+ `1 u0 {) d3 ^8.join能否被嵌套?" L' [* ]0 C/ {& ~" _3 @; W. i- d Y! ^& f
Y6 m" }8 t) ]( d2 w. r# e A' pA.能
6 K5 `2 [3 j* X. vB.不能
/ N$ e" V. F) b+ Z6 n+ k# y! e( B& j9 W: q: V7 j
$ s/ b4 T; R- [, q# ~1 m& C3 X9.考虑如下数据表和查询。如何添加索引能提高查询速度?
' e" X" W _& p7 R0 s/ m3 n" P4 K! z9 x
CREATE TABLE MYTABLE (
- R8 B7 O6 P! jID INT,) J. m; D n& ?
NAME VARCHAR (100),
! r$ r# g- A/ x, sADDRESS1 VARCHAR (100),5 d" X3 k+ V8 D, j8 z
ADDRESS2 VARCHAR (100),
8 s( X) V: e, r9 s. rZIPCODE VARCHAR (10),/ F s& e' F3 @4 Y; P( e* x% m
CITY VARCHAR (50),) Z# x6 O ?) m* C- m
PROVINCE VARCHAR (2)
; u' W, I( f8 `$ I& C$ R% N; n8 ])( h* e% l/ \# `( c: d
SELECT ID, VARCHAR9 A& a% [* H* W/ g, n. g
FROM MYTABLE' l/ z/ Z C2 v9 S9 L
WHERE ID BETWEEN 0 AND 100( P& F J; @, ~# s. |) ~1 F
ORDER BY NAME, ZIPCODE
! g3 i9 M/ E) d! X) p$ s. \- B% `+ v
A.给ID添加索引6 L! D1 v. _3 S: [) }
B.给NAME和ADDRESS1添加索引
" k% v" b% x& T9 J6 z# R% IC.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
9 X. B! l: S; L, J+ cD.给ZIPCODE和NAME添加索引
7 ^2 w' q1 q/ D$ `) JE.给ZIPCODE添加全文检索. R* J6 s) X8 k
& o0 A' @8 f1 A8 m8 c0 M2 q! I& C; Q- H1 }
10.执行以下SQL语句后将发生什么?
& l+ z0 q4 [! r: c/ e/ n/ p5 J$ s' o5 m
BEGIN TRANSACTION! j; {3 T) m4 ]# `
DELETE FROM MYTABLE WHERE ID=1" \: b! m+ E; l( W: E$ L
DELETE FROM OTHERTABLE: Q, R: r0 s( T6 ^* {# Y
ROLLBACK TRANSACTION3 ^% q( T2 x' n" ^/ U
- L P2 `( x# |5 ~# hA.OTHERTABLE中的内容将被删除
8 `% Y. _8 @5 @: C+ IB.OTHERTABLE和MYTABLE中的内容都会被删除/ S' ?- A* z) K' R- _
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除& Z5 E/ [5 g, x
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
) x9 b# ] i7 O( ]* |% c0 C/ p4 sE.数据库没用变化
9 O2 A5 v0 \: E% _
Y# e2 S& o7 n- h. X# E5 t6 P- Y0 U$ K& ]7 v
11.DESC在这个查询中起什么作用?8 p5 V2 t: J6 U, C5 ^' s
; G' z/ ~3 F7 k. z, y6 @SELECT *6 T: H7 p& g$ S9 ^$ y+ F
FROM MY_TABLE$ w7 d. I6 |0 H* H/ C
WHERE ID > 0
. i; G2 l0 n2 f3 Q' TORDER BY ID, NAME DESC
% b6 ]6 ]) N+ g
* J, b9 |$ ]8 e. C9 a kA.返回的数据集倒序排列
6 h# z+ ^4 B3 S( g* k5 i) VB.ID相同的记录按NAME升序排列
6 ]2 o# G2 c' l, R) L) X* z* _C.ID相同的记录按NAME倒序排列
, p" [ Q* }2 E$ A+ W1 m# k+ U# sD.返回的记录先按NAME排序,再安ID排序/ s% L0 W/ l* M# b( k# P
E.结果集中包含对NAME字段的描述
5 k. b, ]0 f3 H
# G; D# U" @% B1 s% K
" _8 k2 J7 ^+ D) D" \ C5 M12.以下哪个不是SQL函数?
* v6 z9 ^) u, e2 n0 n- K
( o6 g. ^7 G* x; M- cA.AVG
& D8 ~8 A b6 ?3 F1 m5 Z g+ iB.SUM) s2 W( E! Q# m8 N h
C.MIN. E/ j8 H0 b2 E7 i* E+ Z9 F
D.MAX' E9 D/ X* n, v. R; h% K' o
E.CURRENT_DATE(), ~9 B2 a( G$ }- Q/ j0 r' g
; V- \2 W. k4 B/ x7 D. r6 k4 @
# ^7 P, z3 @' |6 C
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
1 \1 H3 _" v0 k+ x! O! z, i" M: }: s
A.该字段必须有索引* Q: A) p. j& K6 I
B.该字段必须包括在GROUP BY条件中5 _9 E4 M6 O. J( `
C.该字段必须包含一个累积值% Y. v2 O [; ]) n
D.该字段必须是主键4 ^" y8 W3 J. |5 |& o
E.该字段必须不能包含NULL值8 W) {- l+ _ ~& u K* f A/ `
, u+ ^' e: t/ P% Q7 q4 e/ O% g6 N3 ~9 w s0 D( A0 r- ~/ I
14.以下查询输出什么?
/ t4 A1 A6 \' t5 ~8 \4 Y; s' Y) ~% Q- y
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
) G+ v) G6 H( B3 k/ kON TABLE1.ID <> TABLE2.ID8 b( J6 l& ^7 t' a
" s% c5 n' z7 m" U
A.TABLE1和TABLE2不相同的记录
+ E! E j+ ^, N. \. C2 jB.两个表中相同的记录# ?6 w1 d, `: a7 P0 F
C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数2 p; g. ^- @0 P5 ]
D.两表中不同记录的条数
8 H' V9 L7 k& Y' U: H" A' R; SE.数字2
3 n$ m0 }+ @4 c: E) T1 c+ `4 t% ?( g3 j8 k$ u$ D2 H- }
: R. S# A4 _0 d1 j8 W- {# h" t7 I
15.______能保证一组SQL语句不受干扰的运行?- {, E) S% W8 r+ R; j! X( z
/ C% M X' W" [. j
答案:____________
6 I$ Y& j8 k+ A
7 e* c% U3 \ u' K& q2 }* _. d
8 r- K2 _6 { U4 a" X6 p6 ~
% V0 m2 x' {: M( [8 q答案速查6 S1 a9 Z) F" M3 \' l
1:BC
9 n: z- r$ g) w7 b2:WHERE' h5 t3 m2 J" m0 m, h
3:B
" I% w" I r# r4:E
/ V3 J3 ?, ?3 ^7 R9 y( ?$ C2 _. \4 \5:BD
. }/ u$ @4 t! q6:INSERT
& r- R; J2 ~6 d' b7:C0 e5 X4 `, o3 }( S# v7 m D
8:A
7 ^2 ^/ \. \6 o; t0 ]1 z9:C. |" I6 W- {# j' U; @
10:E0 |! ~2 x' Z d3 F% ^7 x" ?
11:C' L, ^+ K4 `/ k4 F8 z( a
12:E( C/ Q. @; ?$ P; ?6 `: ]
13:BC
: R" `$ \) L: W; n) u( v) b7 w14:C; F3 K& _5 U# C. o" a7 T+ s
15:事务
8 R! ?/ w# t, B; E: f' y+ R7 E ? |5 Q& a
2 F6 r( n* P8 R
5 ^6 t' W! Q7 T a1 ~2 S答案详解
9 ]$ ]# u* ]- }$ {" A: I
6 _( Z/ |* G' L* ~/ @- d4 E1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
% n7 c6 @* G, g% p
* B. A# E9 I. d4 [2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。7 ~$ X3 r9 p) T
) }0 o z1 k" m. `* z2 W3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。
2 Z- l- d/ [3 |6 q! O
( b, @8 n; |! O+ x4 B4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。: B9 R K# _" r+ B6 L
( h- f5 `8 d5 H5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。
7 f. L+ O- T- e$ @1 [3 C% I- q1 j
1 g" S3 o1 y) N2 G$ M0 p9 M6.答案显然是INSERT。
" B R$ M! N5 T& f0 I% }. G
" S3 i; D+ `6 W! e Q* ]7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
; n2 R% N% `! Q1 k) Z
% V6 S }* ` q8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
9 T( N' o T/ z2 L/ u' |9 R9 M# M% s2 ^
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
6 R0 T6 R) _& v* U8 y% R' H9 G; `0 F: S
10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
1 h9 Q9 m/ `" ]2 I7 y4 O
9 R. C, |6 U3 y. z+ H11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。3 Y1 V' d' @% k! t2 {' ~+ }
% ~: `+ I1 k; x
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
( q/ o' s8 @) c; L' r/ n% l M( A% E6 L$ h _& L! g g/ R
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。1 d4 I6 O6 ?3 |. {
' E$ m# m6 a% h* F/ I/ ?* I# R14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。6 J7 j9 a% z% ]- \
. n" h. f V' U2 |, s15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。 |
|