捌玖网络工作室's Archiver

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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。mI"am5Tg5K
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
qC2B;hNwleQ 本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。HWa i^;o

\RIN*b a9M;{&S
?1L d!c9U9]5Hm 问题/Y7gNU!Q:f'`Z
H%qX6pi"l0G?d
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)1gQ W X)if.K!H

7C-^S$K&W ~8o SELECT * FROM MY_TABLE
i7M^$d*e@ mP;fJ8Z8n{1M
A.如果可能,用把查询转换成存储例程*NxF RzL@x(v
B.如果程序允许,给查询指定返回记录的范围
$rUbX7`h/p#[b C.如果可能,添加where条件
9C&}b4o ["O![7F D.如果DBMS允许,把查询转换成视图Ge/I7O gO
E.如果DBMS允许,使用事先准备好的语句
0U3P {|C +l`,? m?"B1a`

(tM3Z/je{ 2.可以用添加______条件的方式对查询返回的数据集进行过滤?2E8YM_k.J+hU%vx
)P:vY]]i"ezC
答案:____________
t ^,cd$?*b
s;HyG d5Zt0o .I-\ wN.T#uD
3.内关联(inner join)是用来做什么的?CaCK"h

&K(tD/W0}-MCPi A.把两个表通过相同字段关联入一张持久的表中
j(jg v+V B.创建基于两个表中相同相同行的结果集
+t;r,|iOT'DY C.创建基于一个表中的记录的数据集)E5wZ&E(`$z;}
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集j{6_jU/a#iQ/J
E.以上都不对
%sF OumA @ @v#? t e+m1A
!V-^9L3r.c-V)MY+B%c!b
4.以下哪个DBMS没有PHP扩展库?b"UUrR3@;]JV

f/x O9}.s A.MySQL
/mC/T&Z R7OU/alh,M B.IBM DB/2
0s nBf^5dB+lC C.PostgreSQL
|cu}O3M;F D.Microsoft SQL Server4F6P;D;@f
E.以上都不对
Ci7V0J4Nu6v ,PI2R[;u4U heR3t

@Kj"d mtH 5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)2Cr FYR&~i

FAwJD;K*O m <?php"Ju5|3q M)r,u1had6R&?
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);*Bj^H5~cT
?>0?;Y.bE(X8\ oC
_bE T"s+dpF
A.MYTABLE表中的记录超过1条
#ZKq]1}%y \I B.用户输入的数据需要经过适当的转义和过滤 ? Ntx.J1o)@cIH;J2f
C.调用该函数将产生一个包含了其他记录条数的记录
2e0uG \ZW8Kw-M2A| D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
3Y7}7p+n o8j'r$dZBM E.查询语句中应该包含数据库名_K \A-R5M-x+Y
;lp x Ts-v
"X:DA~ n n9q3kI
6.______语句能用来向已存在的表中添加新的记录。&Le(K2z er5Ks

B7O*z#ajG1ogW0e 答案:____________
8t#feBRj%|%Jq1z !Rz u8k _

g i*cKT2DhQ'y-} 7.以下哪个说法正确?
G q9t0~-^6U{7Q w[Fn}4`3j
A.使用索引能加快插入数据的速度
]!l1u;_l7g3mFa B.良好的索引策略有助于防止跨站攻击
r B&gj5m.o!w@.i C.应当根据数据库的实际应用按理设计索引
&@fOn]"M3c9W-r D.删除一条记录将导致整个表的索引被破坏*^Mkd{;?:B*sQ
E.只有数字记录行需要索引{1i d\ W;K0U
/JJQzp's TeQ,e

;o j'{P| 8.join能否被嵌套?
6?Y8i-@k0v)CM
X&Q'F!sw[ A.能vW1s-Z_2m,a.f rZ
B.不能
]ax_]9ei :]nB,J2tK l

y5@;c8X \\E3B-W 9.考虑如下数据表和查询。如何添加索引能提高查询速度?xGeRsV G;n
:~p7C| R S}f/m+F
CREATE TABLE MYTABLE (
.d-LDsk ID INT,l'iP'd{3m"jE
NAME VARCHAR (100),
[ \ Rka YP} ADDRESS1 VARCHAR (100),?cpI {#lq6D
ADDRESS2 VARCHAR (100),
-h1]5@+H!jT ZIPCODE VARCHAR (10),
0`f+@]$J*^j$L7{@/O CITY VARCHAR (50),;Z6cZ2s5k"Drt
PROVINCE VARCHAR (2)
cA)ffn6v7\~ )7H8Z"J/_/wC,b
SELECT ID, VARCHAR/mH"c{8u
FROM MYTABLE;IexN5^/C~0T
WHERE ID BETWEEN 0 AND 100
/K+t.?nfx n9P ORDER BY NAME, ZIPCODE0G5h"eVaO{

6iZR?7s7[Ays A.给ID添加索引b`A"O;i gN8] T6z
B.给NAME和ADDRESS1添加索引:J]`2}__J
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
9sk2C5nMqL D.给ZIPCODE和NAME添加索引
/nL{(L(W)A j E.给ZIPCODE添加全文检索
a2X L vG;\ a
4pm3M/NY9p/r&oG$un Na0[/haeh7w
10.执行以下SQL语句后将发生什么?%oQ6[y'i
#Zob"j-d'c!S
BEGIN TRANSACTIONh*gP*A5t7b
DELETE FROM MYTABLE WHERE ID=1 C3L Y~gBIr)x+G p@
DELETE FROM OTHERTABLEZp O+lq8xgD Y
ROLLBACK TRANSACTION
_SI{N)d%_-g
6I#NU akL(EM;b Z*A A.OTHERTABLE中的内容将被删除
Gn9t)n N6f B.OTHERTABLE和MYTABLE中的内容都会被删除
0Z M.p)w3a:x8Q C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
{:uAM#?C'yh D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
1_C2l(u;J3lG h(D E.数据库没用变化
!CQ*a)p\9q.m $a6o MDK

J/uXk+z {k 11.DESC在这个查询中起什么作用?#r~G6E/~1G

%{ bI0Sv$tyi SELECT *F0e/Pux+nQ
FROM MY_TABLE[&r.@w\.r2Q
WHERE ID > 0
_h&bicj|~VkQ ORDER BY ID, NAME DESCT7FkBO Y9z y
U s ~DP([
A.返回的数据集倒序排列
_ wE"[}\sZ+u B.ID相同的记录按NAME升序排列
5D8z4u4CB_S1E&X C.ID相同的记录按NAME倒序排列Q*k+hewc D dDT
D.返回的记录先按NAME排序,再安ID排序/D&V'w,mS'L
E.结果集中包含对NAME字段的描述hZm ~/?)X+D/AsA
*z7Dk_!B:Bvm u2} y

k@J6V+S.Rh-z 12.以下哪个不是SQL函数?
Vi I"kqxO 0J,Q&xOl M/]
A.AVG
op`/{i mS]i B.SUMtG&_M(}!GH _
C.MINxBgdt bXV`
D.MAX
4lVO*I(f1t-N*u1v E.CURRENT_DATE()
.W1\*]"Z s XQEc;q4R X Di%p1S,x;O

Vs ~a*P0S)r 13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
i V |"_x /^NDy Iy2?F
A.该字段必须有索引0w @ F vXaV
B.该字段必须包括在GROUP BY条件中
'dJQl?X_qb@W'H C.该字段必须包含一个累积值
},U}aIM `,]a D.该字段必须是主键5[7O!X}._j*pT#GT
E.该字段必须不能包含NULL值
?%U%y"t I+D{
'N+m j[D4n7TFj Mi[*s#g
14.以下查询输出什么?-h A;q*{n0zb/f&}-v _,j

p*^^5E~0{I1C SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE22I:A3K#J I(S
ON TABLE1.ID <> TABLE2.IDL| jEzA6y0l I:}
-G2~-}'cJJ
A.TABLE1和TABLE2不相同的记录
z;_1g$n;H3Om#B B.两个表中相同的记录
J:SIEA4i?"~ C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
3SY+a2X] ]hA5]c D.两表中不同记录的条数&s5a8Z Bt.q2ZkS
E.数字26_7s kZ5Q(q)C
+C!kPjQ"^&t6A V9eR-i

^`MjFNEN 15.______能保证一组SQL语句不受干扰的运行?
k8ZJrX5pQ
O#R/tX6]/h:WJ 答案:____________ddYo-T(U.Gl

!Fkt:T-e e
8}p!qV9t&DN
F9DXWg 答案速查p$gj%N(XS\h
1:BC
d]2d T5MW 2:WHERE.J!j4R)NbLT-U;Yy7_
3:B,Y b6Blc ^
4:E
0vfD#@0P-U8Lp 5:BD
/R}L9}zL.@'} ~ 6:INSERT
ZT}1ym6Y 7:C,@S[,][t;n ^tk
8:A
8o\!i6m]u|^ 9:C m8K6_Xp
10:E:A5Ob(M@e w p4jI'KV
11:C
"jyW7zHg 12:E8e9o3?_e7c3m
13:BC
l K6G5z @1El M 14:C
1K` Dyj%u 15:事务
u6u,S)AG'k(f W
9e X X9nbk/\ "f~.std5Pv|8Z
Sot D[#T
答案详解
WRG F@.f^ W
Yn*ar[ 1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。s_Ek9m$Z'V!dn
&y1AgD:d-t ?
2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
,N&m5WzA } )r0LK@&zp@3E/O
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。7p+N W9p2o7U5~

x@?C%P 4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
2v.x7R{Q(Stq&o
l)` qPUt#j|U,v%h 5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。AU,^B&j
`7V0EKRSgh1K&ZT
6.答案显然是INSERT。
f?4?F-ay8y z
O i9COc 7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。n U@)h_-A&`i

4e1nW-I?"CJ 8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
:p2t \#Zv,R9JU ONj r2{UWb
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。9\:} \/t3r kywFy
|+cF$R[
10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
5M;P"Q{Kt`!Q5E 4C5n9m0q3~5MMx
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。TL*As1iOX

9hC8[.y H 12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。D'Y9X]*N7k

df"^ Q~} 13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
~zd3f'p)]3tt
p`/{6b#b!W j 14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。.E2eK|~-ma|k8~

M0l{h/GM {&HC,ct 15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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


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