PageRenderTime 27ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/php/mysqli.overview.html

https://bitbucket.org/stillzhl/manuals
HTML | 417 lines | 332 code | 85 blank | 0 comment | 0 complexity | 18e5883ca0c2fff7f930b0c3b60ea990 MD5 | raw file
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <head>
  4. <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  5. <title>Overview</title>
  6. </head>
  7. <body><div class="manualnavbar" style="text-align: center;">
  8. <div class="prev" style="text-align: left; float: left;"><a href="intro.mysqli.html">简介</a></div>
  9. <div class="next" style="text-align: right; float: right;"><a href="mysqli.quickstart.html">Quick start guide</a></div>
  10. <div class="up"><a href="book.mysqli.html">Mysqli</a></div>
  11. <div class="home"><a href="index.html">PHP Manual</a></div>
  12. </div><hr /><div id="mysqli.overview" class="chapter">
  13. <h1>Overview</h1>
  14. <p class="para">
  15. 这一部分对在PHP应用开发过程中需要和Mysql数据库交互时可用的选择进行一个简单介绍
  16. </p>
  17. <p class="para">
  18. <em class="emphasis">什么是API?</em>
  19. </p>
  20. <p class="para">
  21. 一个应用程序接口Application Programming Interface的缩写定义了类方法函数变量等等一切
  22. 你的应用程序中为了完成特定任务而需要调用的内容在PHP应用程序需要和数据库进行交互的时候所需要的API
  23. 通常是通过PHP扩展暴露出来给终端PHP程序员调用
  24. </p>
  25. <p class="para">
  26. API可以是面向过程的也可以是面向对象的对于面向过程的API我们通过调用函数来完成任务而对于面向对象的API
  27. 我们实例化类并在实例化后得到的对象上调用方法对于这两种接口而言后者通常是首选的因为它更加现代化并且
  28. 给我们带来了良好的代码结构
  29. </p>
  30. <p class="para">
  31. 当构建一个需要连接到MySQL服务端的PHP应用的时候有好几种API可供选择此文档就是讨论这些可用的API并讨论如何为
  32. 你的应用选择一个最佳的解决方案
  33. </p>
  34. <p class="para">
  35. <em class="emphasis">什么是连接器?</em>
  36. </p>
  37. <p class="para">
  38. 在MySQL文档中术语<em class="emphasis">connector</em>解释为一段允许你的应用连接到MySQL数据库服务器的软件代码
  39. MySQL提供了很多语言的连接器其中包括PHP的
  40. </p>
  41. <p class="para">
  42. 在你的PHP应用需要和一个数据库服务器交互的时候你需要书写PHP代码去完成连接数据库服务器查询数据库以及其他数据库相关功能
  43. 等一系列活动你的PHP应用将会使用提供这些API的软件或者在需要的时候使用一些中间库来处理你的应用和数据库服务器之间的交互
  44. 这种软件通常被认为是连接器它允许你的引用<em class="emphasis">连接</em>到数据库服务器
  45. </p>
  46. <p class="para">
  47. <em class="emphasis">什么是驱动?</em>
  48. </p>
  49. <p class="para">
  50. 驱动是一段设计用来于一种特定类型的数据库服务器进行交互的软件代码驱动可能会调用一些库比如MySQL客户端库或者MySQL Native驱动库
  51. 这些库实现了用于和MySQL数据库服务器进行交互的底层协议
  52. </p>
  53. <p class="para">
  54. 通过一个例子<a href="mysqli.overview.html#mysqli.overview.pdo" class="link">PDO(PHP Database Object的缩写)</a>数据库抽象层可以
  55. 使用多种特定数据库的驱动其中一种驱动就是PDO MYSQL驱动它就是与MySQL服务器之间的接口
  56. </p>
  57. <p class="para">
  58. 有时大家会不加区分的使用连接器和驱动这两个术语在MySQL相关文档中"<span class="quote">driver</span>"术语被作为一个连接器包
  59. 中提供特定数据库部分的软件代码
  60. </p>
  61. <p class="para">
  62. <em class="emphasis">什么是扩展?</em>
  63. </p>
  64. <p class="para">
  65. 在PHP文档中你还会发现很多其他的<em class="emphasis">扩展</em>PHP代码是由一个核心一些可选扩展组成了核心功能PHP
  66. 的MySQL相关扩展比如<em>mysqli</em><em>mysql</em>都是基于PHP扩展框架实现的
  67. </p>
  68. <p class="para">
  69. 扩展一个典型的作用就是暴露一个API给PHP程序员允许扩展自己的功能可以被程序员使用当然也有一部分基于PHP扩展框架
  70. 开发的扩展不会给PHP程序员暴露API接口
  71. </p>
  72. <p class="para">
  73. 比如说PDO MySQL驱动扩展就没有向PHP程序员暴露API接口但是向它上层的PDO层提供了一个接口
  74. </p>
  75. <p class="para">
  76. 术语API和扩展描述的不是同一类事物因为扩展可能并不需要暴露一个API接口给程序员
  77. </p>
  78. <p class="para">
  79. <em class="emphasis">PHP中提供的用于MySQL的主要API是什么</em>
  80. </p>
  81. <p class="para">
  82. 当考虑连接到MySQL数据库服务器的时候有三种主要的API可供选择
  83. </p>
  84. <ul class="itemizedlist">
  85. <li class="listitem">
  86. <p class="para">
  87. PHP的MySQL扩展
  88. </p>
  89. </li>
  90. <li class="listitem">
  91. <p class="para">
  92. PHP的mysqli扩展
  93. </p>
  94. </li>
  95. <li class="listitem">
  96. <p class="para">
  97. PHP数据对象(PDO)
  98. </p>
  99. </li>
  100. </ul>
  101. <p class="para">
  102. 三者都有各自的优缺点下面的讨论就是为了对每种API的关键方面给出一个简短的介绍
  103. </p>
  104. <p class="para">
  105. <em class="emphasis">什么是PHP的MySQL扩展?</em>
  106. </p>
  107. <p class="para">
  108. 这是设计开发允许PHP应用与MySQL数据库交互的早期扩展<em>mysql</em>扩展提供了一个面向过程
  109. 的接口并且是针对MySQL4.1.3或更早版本设计的因此这个扩展虽然可以与MySQL4.1.3或更新的数据库服务端
  110. 进行交互但并不支持后期MySQL服务端提供的一些特性
  111. </p>
  112. <blockquote class="note"><p><strong class="note">Note</strong>:
  113. <p class="para">
  114. 如果你是使用MySQL4.1.3或更新的服务端版本<em class="emphasis">强烈</em>建议你使用<em>mysqli</em>
  115. 扩展替代它
  116. </p>
  117. </p></blockquote>
  118. <p class="para">
  119. <em>mysql</em>扩展的源代码在PHP扩展目录<var class="filename">ext/mysql</var>
  120. </p>
  121. <p class="para">
  122. 对于<em>mysql</em>扩展的更多信息请参阅<a href="book.mysql.html" class="xref">Mysql</a>
  123. </p>
  124. <p class="para">
  125. <em class="emphasis">什么是PHP的mysqli扩展?</em>
  126. </p>
  127. <p class="para">
  128. <em>mysqli</em>扩展我们有时称之为MySQL<em class="emphasis">增强</em>扩展可以用于使用
  129. MySQL4.1.3或更新版本中新的高级特性<em>mysqli</em>扩展在PHP 5及以后版本中包含
  130. </p>
  131. <p class="para">
  132. <em>mysqli</em>扩展有一系列的优势相对于<em>mysql</em>扩展的提升主要有
  133. <ul class="itemizedlist">
  134. <li class="listitem">
  135. <p class="para">
  136. 面向对象接口
  137. </p>
  138. </li>
  139. <li class="listitem">
  140. <p class="para">
  141. prepared语句支持译注关于prepare请参阅mysql相关文档
  142. </p>
  143. </li>
  144. <li class="listitem">
  145. <p class="para">
  146. 多语句执行支持
  147. </p>
  148. </li>
  149. <li class="listitem">
  150. <p class="para">
  151. 事务支持
  152. </p>
  153. </li>
  154. <li class="listitem">
  155. <p class="para">
  156. 增强的调试能力
  157. </p>
  158. </li>
  159. <li class="listitem">
  160. <p class="para">
  161. 嵌入式服务支持
  162. </p>
  163. </li>
  164. </ul>
  165. </p>
  166. <blockquote class="note"><p><strong class="note">Note</strong>:
  167. <p class="para">
  168. 如果你使用MySQL4.1.3或更新版本<em class="emphasis">强烈</em>建议你使用这个扩展
  169. </p>
  170. </p></blockquote>
  171. <p class="para">
  172. 在提供了面向对象接口的同时也提供了一个面向过程的接口
  173. </p>
  174. <p class="para">
  175. <em>mysqli</em>扩展是使用PHP扩展框架构建的它的源代码在PHP源码目录下的<var class="filename">ext/mysqli</var>
  176. </p>
  177. <p class="para">
  178. 对于<em>mysqli</em>扩展的更多信息请参阅<a href="book.mysqli.html" class="xref">Mysqli</a>
  179. </p>
  180. <p class="para" id="mysqli.overview.pdo">
  181. <em class="emphasis">什么是PDO?</em>
  182. </p>
  183. <p class="para">
  184. PHP数据对象是PHP应用中的一个数据库抽象层规范PDO提供了一个统一的API接口可以使得你的PHP应用不去关心具体要
  185. 连接的数据库服务器系统类型也就是说如果你使用PDO的API可以在任何需要的时候无缝切换数据库服务器比如从Firebird
  186. 到MySQL仅仅需要修改很少的PHP代码
  187. </p>
  188. <p class="para">
  189. 其他数据库抽象层的例子包括Java应用中的JDBC以及Perl中的DBI
  190. </p>
  191. <p class="para">
  192. 当然PDO也有它自己的先进性比如一个干净的简单的可移植的API它最主要的缺点是会限制让你不能使用
  193. 后期MySQL服务端提供所有的数据库高级特性比如PDO不允许使用MySQL支持的多语句执行
  194. </p>
  195. <p class="para">
  196. PDO是基于PHP扩展框架实现的它的源码在PHP源码目录的<var class="filename">ext/pdo</var>
  197. </p>
  198. <p class="para">
  199. PDO的更多信息请参阅<a href="book.pdo.html" class="xref">PDO</a>
  200. </p>
  201. <p class="para">
  202. <em class="emphasis">什么是PDO的MySQL驱动器?</em>
  203. </p>
  204. <p class="para">
  205. PDO的MySQL驱动并不是一套API至少从PHP程序员的角度来看是这样的实际上PDO的MySQL驱动处于PDO自己的下层
  206. 提供了特定的Mysql功能程序员直接调用PDO的API而PDO使用了PDO的MySQL驱动完成与MySQL服务器端的交互
  207. </p>
  208. <p class="para">
  209. PDO的MySQL驱动是众多PDO驱动中的一个其他可用的PDO驱动包括FirebirdPostgreSQL等等
  210. </p>
  211. <p class="para">
  212. PDO的MySQL驱动是基于PHP扩展框架实现的它的源码在PHP源码目录下的<var class="filename">ext/pdo_mysql</var>
  213. 它没有向PHP程序员暴露API
  214. </p>
  215. <p class="para">
  216. PDO的MySQL扩展的更多信息请参阅<a href="ref.pdo-mysql.html" class="xref">MySQL (PDO)</a>
  217. </p>
  218. <p class="para" id="mysqli.overview.mysqlnd">
  219. <em class="emphasis">什么是PHP的MySQL Native 驱动?</em>
  220. </p>
  221. <p class="para">
  222. 为了与MySQL数据库服务端进行交互<em>mysql</em>扩展<em>mysqli</em>扩展
  223. PDO MySQL驱动都使用了实现了必要的协议的底层库以前可用的库只有MySQL客户端库和<em>libmysql</em>
  224. </p>
  225. <p class="para">
  226. 然而<em>libmysql</em>包含的接口没有针对与PHP的应用交互进行优化<em>libmysql</em>
  227. 是早期为C应用程序设计的基于这个原因MySQL Native驱动<em>mysqlnd</em>作为<em>libmysql</em>的一个
  228. 针对PHP应用的修改版本被开发
  229. </p>
  230. <p class="para">
  231. <em>mysql</em><em>mysqli</em>以及PDO Mysql驱动都可以各自配置使用
  232. <em>libmysql</em>或者<em>mysqlnd</em><em>mysqlnd</em>作为一个专门设计
  233. 用于PHP系统的库它在内存和速度上都比<em>libmysql</em>有很大提升非常希望你去尝试这些提升
  234. </p>
  235. <blockquote class="note"><p><strong class="note">Note</strong>:
  236. <p class="para">
  237. MySQL Native驱动仅仅可以在MySQL服务端版本为4.1.3及以后版本才可以使用
  238. </p>
  239. </p></blockquote>
  240. <p class="para">
  241. MySQL Native驱动是基于PHP扩展框架实现的源代码位于PHP源码目录的<var class="filename">ext/mysqlnd</var>
  242. 它没有向PHP程序员暴露接口
  243. </p>
  244. <p class="para">
  245. <em class="emphasis">特性比较</em>
  246. </p>
  247. <p class="para">
  248. 下表比较了PHP中三种主要的MySQL连接方式的功能
  249. </p>
  250. <table class="doctable informaltable">
  251. <col width="25*" />
  252. <col width="25*" />
  253. <col width="25*" />
  254. <col width="25*" />
  255. <thead>
  256. <tr>
  257. <th class="empty">&nbsp;</th>
  258. <th>PHP的mysqli扩展</th>
  259. <th>PDO (使用PDO MySQL驱动和MySQL Native驱动)</th>
  260. <th>PHP的mysql扩展</th>
  261. </tr>
  262. </thead>
  263. <tbody class="tbody">
  264. <tr>
  265. <td>引入的PHP版本</td>
  266. <td>5.0</td>
  267. <td>5.0</td>
  268. <td>3.0之前</td>
  269. </tr>
  270. <tr>
  271. <td>PHP5.x是否包含</td>
  272. <td></td>
  273. <td></td>
  274. <td></td>
  275. </tr>
  276. <tr>
  277. <td>MySQL开发状态</td>
  278. <td>活跃</td>
  279. <td>在PHP5.3中活跃</td>
  280. <td>仅维护</td>
  281. </tr>
  282. <tr>
  283. <td>在MySQL新项目中的建议使用程度</td>
  284. <td>建议 - 首选</td>
  285. <td>建议</td>
  286. <td>不建议</td>
  287. </tr>
  288. <tr>
  289. <td>API的字符集支持</td>
  290. <td></td>
  291. <td></td>
  292. <td></td>
  293. </tr>
  294. <tr>
  295. <td>服务端prepare语句的支持情况</td>
  296. <td></td>
  297. <td></td>
  298. <td></td>
  299. </tr>
  300. <tr>
  301. <td>客户端prepare语句的支持情况</td>
  302. <td></td>
  303. <td></td>
  304. <td></td>
  305. </tr>
  306. <tr>
  307. <td>存储过程支持情况</td>
  308. <td></td>
  309. <td></td>
  310. <td></td>
  311. </tr>
  312. <tr>
  313. <td>多语句执行支持情况</td>
  314. <td></td>
  315. <td>大多数</td>
  316. <td></td>
  317. </tr>
  318. <tr>
  319. <td>是否支持所有MySQL4.1以上功能</td>
  320. <td></td>
  321. <td>大多数</td>
  322. <td></td>
  323. </tr>
  324. </tbody>
  325. </table>
  326. </div>
  327. <hr /><div class="manualnavbar" style="text-align: center;">
  328. <div class="prev" style="text-align: left; float: left;"><a href="intro.mysqli.html">简介</a></div>
  329. <div class="next" style="text-align: right; float: right;"><a href="mysqli.quickstart.html">Quick start guide</a></div>
  330. <div class="up"><a href="book.mysqli.html">Mysqli</a></div>
  331. <div class="home"><a href="index.html">PHP Manual</a></div>
  332. </div></body></html>