捌玖网络工作室's Archiver

admin 发表于 2008-4-17 14:44

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。1Y7t6zB7^u)|-|gn
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。!|%bO9g G1KwN T:c
本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。BFQ x[F4N"O%e

!u#m,xB@6V!e |1N2q}$R2S K#c,i
问题Q6O-cQoK

\[l.s5f1bS 1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)
!SC;cM3d4B \#o.a~,] r
SELECT * FROM MY_TABLE/Ev H|I#OE@
M*iMa |9I6k(w
A.如果可能,用把查询转换成存储例程
%dUXREC$K B.如果程序允许,给查询指定返回记录的范围
3?pLtq.D}RK C.如果可能,添加where条件
wLXh)Xi D.如果DBMS允许,把查询转换成视图 ro)qd0}kM:Y-[
E.如果DBMS允许,使用事先准备好的语句
!hsAOG0L#[)`u
6a8KDL%_7ZJvZZ
2w;D(zQN,Cn4i 2.可以用添加______条件的方式对查询返回的数据集进行过滤?
r3R*NBq(x(Ez ?/w1R\*j^p
答案:____________D/Q:D/I Q \&H `

A'M"N r^?\`-f
@9b&PM*L`e 3.内关联(inner join)是用来做什么的?/O/vy]'W N
j6w Q](g?/O
A.把两个表通过相同字段关联入一张持久的表中l okdiS _
B.创建基于两个表中相同相同行的结果集u9Q5UzXy3S v;W7y.sr
C.创建基于一个表中的记录的数据集xz$u-DoZwn
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集.N0D}{#b+QZb
E.以上都不对
(|D5j?1X2R r?
S'L,\}^6]^sb
"K/Z5`.^Go 4.以下哪个DBMS没有PHP扩展库?
R_"mSLi2h
!H0R#o7hpG n-J A.MySQL-qpiz;g,NS,?6v Y
B.IBM DB/2
1ReHT1{(@5H'x0l!R C.PostgreSQL
_LW0J'] g D*] D.Microsoft SQL Server;cZV-fE&o/H
E.以上都不对
E9~-MI{n.{:u }7^8n0zIE!l

} Hf5j'Qw3M/?"w 5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
-I%hGd*Y '@X!R9IEc
<?php
W7Jz z~n oJ6n $r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);f\lds^!r*m
?>3p0T]"`A+@
9u|7_ e@,Z;b
A.MYTABLE表中的记录超过1条-Nx A"O.U9t-o:xv
B.用户输入的数据需要经过适当的转义和过滤
k s%J8sm(|+b+m-D+?K C.调用该函数将产生一个包含了其他记录条数的记录
I8GJB*h O D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除p]:T'g t7f;s(x
E.查询语句中应该包含数据库名S-`U0x"c

rLDORxO(Q ]\u UB#Xjt
6.______语句能用来向已存在的表中添加新的记录。
KV;^_E/E/rH Nq ~$G(h~/~Y
答案:____________
WZ7rlitlk QlHx&LahI
~#}0Lh;U*P _)~
7.以下哪个说法正确?
9c_:k(WrXXmrmXr9S
;J]*z JU;Yzs A.使用索引能加快插入数据的速度
cZZ*Q ZX B.良好的索引策略有助于防止跨站攻击
K9@|pq9H+@I#sM F C.应当根据数据库的实际应用按理设计索引
@vnw%l%x~]%^%`5r D.删除一条记录将导致整个表的索引被破坏9iKuQ \p
E.只有数字记录行需要索引O${S%tB|F`\9[

4b5YnLU0ShA K
c'Wq%_`N,|2le 8.join能否被嵌套? rdP)bG5g*k/J!WN3?b

`H FfM6On A.能mlh T\h
B.不能
9J ~/p2[s-sLBS
$u(Rk"tLj/fQp%@
(]g`8\Y"EB#K 9.考虑如下数据表和查询。如何添加索引能提高查询速度? rt:fy2} ]
/p(p_Gfb
CREATE TABLE MYTABLE (*p-OPyx|o
ID INT,nDL,`n4L
NAME VARCHAR (100),+_'kU zF
ADDRESS1 VARCHAR (100),!?7K)^VG"|aY4C
ADDRESS2 VARCHAR (100),.R^W)U]*Ff F
ZIPCODE VARCHAR (10),
P wE9p0l#IQo2` CITY VARCHAR (50),
3e-cP.y-AC6\X B PROVINCE VARCHAR (2)3@/k#]+r%YK
)*R"b&J{YR
SELECT ID, VARCHAR
K6y^*u6BsP FROM MYTABLE$UA m4~-@,q F#^!?~ R
WHERE ID BETWEEN 0 AND 100a#x YR y7e
ORDER BY NAME, ZIPCODE
&F%c8AUbU7b8YD;` %~/W#pn,K }ot
A.给ID添加索引
mM%Q;k,d#r U.`*g B.给NAME和ADDRESS1添加索引
)AP8O!{PK C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引^xRKzRW*c%E3`
D.给ZIPCODE和NAME添加索引!Twe}\|t
E.给ZIPCODE添加全文检索 l9o5?;Fc$l

)w f YV h/S Bs
h"Y&{(w]W b)U 10.执行以下SQL语句后将发生什么? R(e0V^*{7].N2w o
"N,M2rf+f+E5g
BEGIN TRANSACTION
5Ru:qx-b DELETE FROM MYTABLE WHERE ID=1
"R(L(D"Int5[ DELETE FROM OTHERTABLE A:eM.E;TyyuwU2GF
ROLLBACK TRANSACTION(m Vm#UL"h3M/B6lbg

:]X4W-?#VSp A.OTHERTABLE中的内容将被删除7V%M.yZ%^Qj a$|RM/X
B.OTHERTABLE和MYTABLE中的内容都会被删除
.U c k4up p^r C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
o!b C#VMv.] D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
;J f/C{.G E.数据库没用变化8B o Oq(J
I{js.\1{

"P)q.z sc S)zn7` 11.DESC在这个查询中起什么作用?
#_"[&?lXb
%No is8Q$N#m.H)b w SELECT *
4H*^,cA_nh FROM MY_TABLE/U4S5}!zTqu^4id
WHERE ID > 0
vt;]My6r m ORDER BY ID, NAME DESC
g`nd;NQ*i}Jx6O }%j l~e|4A0B-s
A.返回的数据集倒序排列
t,o+r9{ mq B.ID相同的记录按NAME升序排列$omlD"@7`{
C.ID相同的记录按NAME倒序排列
_I3_V1W"]aHcw D.返回的记录先按NAME排序,再安ID排序n;yG6_t1^1G l#i
E.结果集中包含对NAME字段的描述8joxJf*C#U"w%q

2O4B)s1_ yq
;E'L&XG"Y o X;j 12.以下哪个不是SQL函数?!qj9w%j} bo1^e
C0K!y5]R#}Ex
A.AVGTG0@u L9Xb~$u
B.SUM
rAg0P"S C.MIN
r @0]'d^(XKL'[;u D.MAX
2c2cUi}h E.CURRENT_DATE()
?^#w G$kr!A
cu1H6av$F W%L"P Bc/LR5J+u1P"]G#u
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?MM-} ^2?,O!Z

wDZ,e Y^W A.该字段必须有索引
H}} Q)Z#}#`Y\ B.该字段必须包括在GROUP BY条件中
8z+U-l ZVs&Jvj u C.该字段必须包含一个累积值zXL&\ Ga~${
D.该字段必须是主键$ZvG:r'Mx U
E.该字段必须不能包含NULL值
-cm;[-wL +[+grC,@l i$_ qS

L*@/k%l%_ 14.以下查询输出什么?
.p!E"L A`_(Kf `*Z I6|q6z7fM},[P
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2 [V&alf
ON TABLE1.ID <> TABLE2.ID
i6lEJD1F"_2| g%So Bj{dO1H
A.TABLE1和TABLE2不相同的记录(^j6o)n9]
B.两个表中相同的记录
\OUf7[ C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数he._i$vH\Dgc
D.两表中不同记录的条数
,F `/}%AD Q7M E.数字21u Tq0gN }1z'kY
tgH$qu.R
1f;An5|:] ` m$mG
15.______能保证一组SQL语句不受干扰的运行?
L1wk9{s 8z6NWvWlq
答案:____________
'q@n*~"p S-|:^
+c8\%D+a(J:F? Zl7S'XQ5TR(A

4mRE(t!}gi6TX 答案速查
(ER H `wO8iV6Rx7X 1:BCa2Yl"W5STg Q F1z0@:\
2:WHERE
7f&[)k&Do c 3:B
%U(U r+z`@+u 4:E
2v w.WT1m$X{ 5:BD
'opL8?jXu 6:INSERT
$?4K|%NW*f 7:C_^y7u(~.X6H
8:Ake[!UP@ M
9:C g-S;kd:p~
10:E
mS`^t\K\ 11:C
DnXyJ{cH 12:E$w!aUG5Z+K
13:BC
FY!^}{xl 14:C
,`P|9E&x 15:事务v%_If-uyP2_~|zs
@:H(c:s*K

mB:GXN'R
n g NE9v 答案详解0{3F)r d[2U:|

+v cG;q}0Ej 1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
!I5VK-}S\%_Y"|/h)E? c7mU p)n&F
2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
%]O'lA$K"BK P/^#G8K&^ sD
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。 lNI*kMq t
mGZv6TO
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
[K1^g9l:C
Lc:@d MX$P9CIP!D 5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。
U:f/XzjW
eD A4SfQ~'a3aaV 6.答案显然是INSERT。
d;zW/nv*Ssj
?F"\o;__ 7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
%W2swh s3ar'g+d
{?.r CNe s 8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。aI$gq*k

#n,_-wH |W 9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。K2Q4a {} g

x|P$o[BzA 10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
jE g/Q+@/}%o
cju5f*E#S 11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
L:j D&J)B)xK
;^mR;Z2S&V H^&N 12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。)P%?2qnRA-r)o6tS
MN{r|p
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
;|$Q2ql:Q:W(he ~fs+H7}F'U$D
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。.L(N6}6QK$H7X!y
v'Q1UJ:~m5Z
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

页: [1]
【捌玖网络】已经运行:


Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.