天天看点

[PHP]PHP编程操作Mysql数据库的三种方式

当我开始去接触PHP的时候,真切的感受到其所具有的魅力,本着学习的态度和打破固有的语言和模式的想法,开始了PHP之旅,总的来说,走的还是比较顺利,在其中能够看到C,Java,Perl影子,学习曲线不大,但是做好产品仍然有着一条漫漫长路。

   多余的话不说了,慢慢感受和领悟,本文主要讲述PHP操作数据库的三种扩展。

  如下图是PHP访问数据库的三种扩展方式:

  下面举出三种方式访问数据库并查询数据的实例代码:

  1.mysql扩展

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

<code>&lt;?php</code>

<code>//1:获取数据库连接</code>

<code>$connection</code> <code>= @ mysql_connect(</code><code>'127.0.0.1:3306'</code><code>, </code><code>'root'</code><code>, </code><code>'root'</code><code>) </code><code>or</code> <code>die</code><code>(</code><code>'Mysql connection failed '</code> <code>. mysql_error());</code>

<code>//2:选择数据库</code>

<code>mysql_select_db(</code><code>'phptest'</code><code>) </code><code>or</code> <code>die</code><code>(</code><code>'Database phptest not exist '</code> <code>. mysql_error());</code>

<code>//3:查询数据</code>

<code>$sql</code> <code>= </code><code>'SELECT id as `编号`, name as `姓名`, birthday as `出生日期`, phone as `联系方式` , address as `地址` '</code> <code>.</code>

<code>'FROM  `t_user` LIMIT 0 , 30'</code><code>;</code>

<code>$result</code> <code>= mysql_query(</code><code>$sql</code><code>) </code><code>or</code> <code>die</code><code>(</code><code>'Query failed '</code> <code>. mysql_error());</code>

<code>//4:处理查询结果</code>

<code>#打印查询数据</code>

<code>echo</code> <code>'&lt;table&gt;'</code><code>;</code>

<code>#打印列信息</code>

<code>$i</code> <code>= 0;</code>

<code>echo</code> <code>'&lt;tr&gt;'</code><code>;</code>

<code>while</code> <code>(</code><code>$i</code> <code>&lt; mysql_num_fields(</code><code>$result</code><code>)) {</code>

<code>    </code><code>$meta</code> <code>= mysql_fetch_field(</code><code>$result</code><code>);</code>

<code>    </code><code>echo</code> <code>'&lt;td&gt;'</code><code>;</code>

<code>    </code><code>echo</code> <code>$meta</code><code>-&gt;name;</code>

<code>    </code><code>echo</code> <code>'&lt;/td&gt;'</code><code>;</code>

<code>    </code><code>$i</code><code>++;</code>

<code>}</code>

<code>echo</code> <code>'&lt;tr/&gt;'</code><code>;</code>

<code>#打印行记录</code>

<code>while</code> <code>(</code><code>$line</code> <code>= mysql_fetch_array(</code><code>$result</code><code>, MYSQL_ASSOC)) {</code>

<code>    </code><code>echo</code> <code>'&lt;tr&gt;'</code><code>;</code>

<code>    </code><code>foreach</code> <code>(</code><code>$line</code> <code>as</code> <code>$value</code><code>) {</code>

<code>        </code><code>echo</code> <code>'&lt;td&gt;'</code> <code>. </code><code>$value</code> <code>. </code><code>'&lt;/td&gt;'</code><code>;</code>

<code>    </code><code>}</code>

<code>    </code><code>echo</code> <code>'&lt;/tr&gt;'</code><code>;</code>

<code>echo</code> <code>'&lt;/table&gt;'</code><code>;</code>

<code>//5:释放结果内存</code>

<code>mysql_free_result(</code><code>$result</code><code>);</code>

<code>//6:关闭数据库连接</code>

<code>mysql_close(</code><code>$connection</code><code>);</code>

<code>?&gt;</code>

  2.mysqli扩展

38

39

40

41

42

43

44

45

46

<code>#使用面向对象的方式操作mysql数据库</code>

<code>//1:创建mysqli对象</code>

<code>$mysqli</code> <code>= </code><code>new</code> <code>mysqli();</code>

<code>//2:连接数据库</code>

<code>$mysqli</code><code>-&gt;connect(</code><code>'127.0.0.1'</code><code>, </code><code>'root'</code><code>, </code><code>'root'</code><code>);</code>

<code>$mysqli</code><code>-&gt;select_db(</code><code>'phptest'</code><code>);</code>

<code>if</code> <code>(</code><code>$mysqli</code><code>-&gt;connect_errno) {</code>

<code>    </code><code>echo</code> <code>'连接数据库失败'</code><code>;</code>

<code>    </code><code>exit</code> <code>();</code>

<code>//3:获取MySQLi_STMT(执行SQL命令)对象,$stmt</code>

<code>if</code> <code>(</code><code>$stmt</code> <code>= </code><code>$mysqli</code><code>-&gt;prepare(</code><code>$sql</code><code>)) {</code>

<code>    </code><code>#执行查询</code>

<code>    </code><code>$stmt</code><code>-&gt;execute();</code>

<code>    </code><code>$stmt</code><code>-&gt;bind_result(</code><code>$id</code><code>, </code><code>$name</code><code>, </code><code>$birthday</code><code>, </code><code>$phone</code><code>, </code><code>$address</code><code>);</code>

<code>    </code><code>#打印查询数据</code>

<code>    </code><code>echo</code> <code>'&lt;table&gt;'</code><code>;</code>

<code>    </code><code>#打印列信息</code>

<code>    </code><code>$meta</code> <code>= </code><code>$stmt</code><code>-&gt;result_metadata()-&gt;fetch_fields();</code>

<code>    </code><code>foreach</code> <code>(</code><code>$meta</code> <code>as</code> <code>$val</code><code>) {</code>

<code>        </code><code>echo</code> <code>'&lt;td&gt;'</code><code>;</code>

<code>        </code><code>echo</code> <code>$val</code><code>-&gt;name;</code>

<code>        </code><code>echo</code> <code>'&lt;/td&gt;'</code><code>;</code>

<code>    </code><code>echo</code> <code>'&lt;tr/&gt;'</code><code>;</code>

<code>    </code><code>while</code> <code>(</code><code>$stmt</code><code>-&gt;fetch()) {</code>

<code>        </code><code>echo</code> <code>'&lt;tr&gt;'</code><code>;</code>

<code>        </code><code>echo</code> <code>'&lt;td&gt;'</code> <code>. </code><code>$id</code> <code>. </code><code>'&lt;/td&gt;'</code><code>;</code>

<code>        </code><code>echo</code> <code>'&lt;td&gt;'</code> <code>. </code><code>$name</code> <code>. </code><code>'&lt;/td&gt;'</code><code>;</code>

<code>        </code><code>echo</code> <code>'&lt;td&gt;'</code> <code>. </code><code>$birthday</code> <code>. </code><code>'&lt;/td&gt;'</code><code>;</code>

<code>        </code><code>echo</code> <code>'&lt;td&gt;'</code> <code>. </code><code>$phone</code> <code>. </code><code>'&lt;/td&gt;'</code><code>;</code>

<code>        </code><code>echo</code> <code>'&lt;td&gt;'</code> <code>. </code><code>$address</code> <code>. </code><code>'&lt;/td&gt;'</code><code>;</code>

<code>        </code><code>echo</code> <code>'&lt;/tr&gt;'</code><code>;</code>

<code>    </code><code>echo</code> <code>'&lt;/table&gt;'</code><code>;</code>

<code>    </code><code>echo</code> <code>'&lt;h4&gt;查询结果记录数:'</code> <code>. </code><code>$stmt</code><code>-&gt;num_rows.</code><code>'&lt;/h4&gt;'</code><code>;</code>

<code>    </code><code>//4:关闭MySQLi_STMT</code>

<code>    </code><code>$stmt</code><code>-&gt;close();</code>

<code>//5:关闭数据库连接</code>

<code>$mysqli</code><code>-&gt;close();</code>

 3.PDO_MYSQL扩展

  数据库连接配置信息pdo-inc.php:

<code> </code> 

<code>$dsn</code> <code>= </code><code>'mysql:host=127.0.0.1:3306;dbname=phptest'</code><code>;</code>

<code>$username</code> <code>= </code><code>'root'</code><code>;</code>

<code>$password</code> <code>= </code><code>'root'</code><code>;</code>

<code>$opt</code> <code>= </code><code>array</code> <code>(</code>

<code>    </code><code>PDO :: ATTR_TIMEOUT =&gt; 40</code>

<code>);</code>

  使用PDO访问数据库

<code>//1:引入数据库连接信息</code>

<code>require_once</code> <code>(</code><code>'pdo-inc.php'</code><code>);</code>

<code>//2:创建PDO对象</code>

<code>try</code> <code>{</code>

<code>    </code><code>$pdo</code> <code>= </code><code>new</code> <code>PDO(</code><code>$dsn</code><code>, </code><code>$username</code><code>, </code><code>$password</code><code>, </code><code>$opt</code><code>);</code>

<code>} </code><code>catch</code> <code>(PDOException </code><code>$e</code><code>) {</code>

<code>    </code><code>echo</code> <code>'数据库连接失败 '</code> <code>. </code><code>$e</code><code>-&gt;getMessage();</code>

<code>//3:创建预编译命令对象PDOStatement</code>

<code>if</code> <code>(</code><code>$stmt</code> <code>= </code><code>$pdo</code><code>-&gt;prepare(</code><code>$sql</code><code>)) {</code>

<code>    </code><code>//4:执行</code>

<code>    </code><code>for</code> <code>(</code><code>$i</code> <code>= 0, </code><code>$columnCount</code> <code>= </code><code>$stmt</code><code>-&gt;columnCount(); </code><code>$i</code> <code>&lt; </code><code>$columnCount</code><code>; </code><code>$i</code><code>++) {</code>

<code>        </code><code>$meta</code> <code>= </code><code>$stmt</code><code>-&gt;getColumnMeta(</code><code>$i</code><code>);</code>

<code>        </code><code>echo</code> <code>$meta</code><code>[</code><code>'name'</code><code>];</code>

<code>    </code><code>$row_num</code> <code>= 0;</code>

<code>    </code><code>while</code> <code>(</code><code>$row</code> <code>= </code><code>$stmt</code><code>-&gt;fetch(PDO :: FETCH_NUM)) {</code>

<code>        </code><code>$row_num</code><code>++;</code>

<code>        </code><code>foreach</code> <code>(</code><code>$row</code> <code>as</code> <code>$value</code><code>) {</code>

<code>            </code><code>echo</code> <code>'&lt;td&gt;'</code> <code>. </code><code>$value</code> <code>. </code><code>'&lt;/td&gt;'</code><code>;</code>

<code>        </code><code>}</code>

<code>    </code><code>#需要统计查询的行数</code>

<code>    </code><code>echo</code> <code>'一共'</code> <code>. </code><code>$row_num</code> <code>. </code><code>'条记录&lt;br/&gt;使用PDOStatement::rowCount来统计,一共'</code> <code>. </code><code>$stmt</code><code>-&gt;rowCount() . </code><code>'条记录'</code><code>;</code>

<code>    </code><code>//5:关闭游标</code>

<code>    </code><code>$stmt</code><code>-&gt;closeCursor();</code>

<code>//6:释放PDO对象</code>

<code>$pdo</code> <code>= null;</code>

  看到上面代码很明显的不同在于访问Mysql数据库,却再也看不到Mysql相关函数和字样,这一点正是PDO所希望的,PDO使得PHP访问数据库将面向接口而不是具体的实现,这也为改变数据库而不用担心应用程序与数据库过度的耦合提供了基础。简而言之就是做到了面向对象中的面向接口编程的原则。

  就操作数据而言,更多的是针对API来编程,具备数据库的相关知识(主要是SQL)和熟悉相关API既可以操作数据库,面对PHP操作数据库的多种扩展,到底使用哪一种方式,暂时不知道,看情况吧。

本文转自 secondriver 51CTO博客,原文链接:http://blog.51cto.com/aiilive/1546901,如需转载请自行联系原作者