[PHP]PHP編程操作Mysql資料庫的三種方式

來源:互聯網
上載者:User

標籤:mysql   pdo   php訪問資料庫   


    當我開始去接觸PHP的時候,真切的感受到其所具有的魅力,本著學習的態度和打破固有的語言和模式的想法,開始了PHP之旅,總的來說,走的還是比較順利,在其中能夠看到C,Java,Perl影子,學習曲線不大,但是做好產品仍然有著一條漫漫長路。


   多餘的話不說了,慢慢感受和領悟,本文主要講述PHP操作資料庫的三種擴充。


  如是PHP訪問資料庫的三種擴充方式:

  650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/47/DD/wKioL1QBkeWAA_GrAAD2LHLHPDQ256.jpg" title="php-mysql.png" width="680" height="228" border="0" hspace="0" vspace="0" style="width:680px;height:228px;" alt="wKioL1QBkeWAA_GrAAD2LHLHPDQ256.jpg" />

    

  下面舉出三種方式訪問資料庫並查詢資料的執行個體代碼:

  1.mysql擴充

  

<?php//1:擷取資料庫連接$connection = @ mysql_connect(‘127.0.0.1:3306‘, ‘root‘, ‘root‘) or die(‘Mysql connection failed ‘ . mysql_error());//2:選擇資料庫mysql_select_db(‘phptest‘) or die(‘Database phptest not exist ‘ . mysql_error());//3:查詢資料$sql = ‘SELECT id as `編號`, name as `姓名`, birthday as `出生日期`, phone as `連絡方式` , address as `地址` ‘ .‘FROM  `t_user` LIMIT 0 , 30‘;$result = mysql_query($sql) or die(‘Query failed ‘ . mysql_error());//4:處理查詢結果#列印查詢資料echo ‘<table>‘;#列印列資訊$i = 0;echo ‘<tr>‘;while ($i < mysql_num_fields($result)) {$meta = mysql_fetch_field($result);echo ‘<td>‘;echo $meta->name;echo ‘</td>‘;$i++;}echo ‘<tr/>‘;#列印行記錄while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {echo ‘<tr>‘;foreach ($line as $value) {echo ‘<td>‘ . $value . ‘</td>‘;}echo ‘</tr>‘;}echo ‘</table>‘;//5:釋放結果記憶體mysql_free_result($result);//6:關閉資料庫連接mysql_close($connection);?>


  2.mysqli擴充

  

<?php#使用物件導向的方式操作mysql資料庫//1:建立mysqli對象$mysqli = new mysqli();//2:串連資料庫$mysqli->connect(‘127.0.0.1‘, ‘root‘, ‘root‘);$mysqli->select_db(‘phptest‘);if ($mysqli->connect_errno) {echo ‘串連資料庫失敗‘;exit ();}//3:擷取MySQLi_STMT(執行SQL命令)對象,$stmt$sql = ‘SELECT id as `編號`, name as `姓名`, birthday as `出生日期`, phone as `連絡方式` , address as `地址` ‘ .‘FROM  `t_user` LIMIT 0 , 30‘;if ($stmt = $mysqli->prepare($sql)) {#執行查詢$stmt->execute();$stmt->bind_result($id, $name, $birthday, $phone, $address);#列印查詢資料echo ‘<table>‘;#列印列資訊echo ‘<tr>‘;$meta = $stmt->result_metadata()->fetch_fields();foreach ($meta as $val) {echo ‘<td>‘;echo $val->name;echo ‘</td>‘;}echo ‘<tr/>‘;while ($stmt->fetch()) {echo ‘<tr>‘;echo ‘<td>‘ . $id . ‘</td>‘;echo ‘<td>‘ . $name . ‘</td>‘;echo ‘<td>‘ . $birthday . ‘</td>‘;echo ‘<td>‘ . $phone . ‘</td>‘;echo ‘<td>‘ . $address . ‘</td>‘;echo ‘</tr>‘;}echo ‘</table>‘;echo ‘<h4>查詢結果記錄數:‘ . $stmt->num_rows.‘</h4>‘;//4:關閉MySQLi_STMT$stmt->close();}//5:關閉資料庫連接$mysqli->close();?>

  上面使用的是mysqli擴充的物件導向風格的方式進行資料庫操作,如何要使用面向過程的風格操作資料庫則需要使用函數。比如關閉資料庫連接,物件導向風格則是:$mysqli->close() 而使用面向過程風格則是:close($mysqli),具體詳則可以參見PHP_Manual。


 3.PDO_MYSQL擴充

  資料庫連接配置資訊pdo-inc.php:

  

<?php $dsn = ‘mysql:host=127.0.0.1:3306;dbname=phptest‘;$username = ‘root‘;$password = ‘root‘;$opt = array (PDO :: ATTR_TIMEOUT => 40);?>

 

  使用PDO訪問資料庫

  

<?php//1:引入資料庫連接資訊require_once (‘pdo-inc.php‘);//2:建立PDO對象try {$pdo = new PDO($dsn, $username, $password, $opt);} catch (PDOException $e) {echo ‘資料庫連接失敗 ‘ . $e->getMessage();exit ();}$sql = ‘SELECT id as `編號`, name as `姓名`, birthday as `出生日期`, phone as `連絡方式` , address as `地址` ‘ .‘FROM  `t_user` LIMIT 0 , 30‘;//3:建立先行編譯命令對象PDOStatementif ($stmt = $pdo->prepare($sql)) {//4:執行$stmt->execute();#列印查詢資料echo ‘<table>‘;echo ‘<tr>‘;for ($i = 0, $columnCount = $stmt->columnCount(); $i < $columnCount; $i++) {$meta = $stmt->getColumnMeta($i);echo ‘<td>‘;echo $meta[‘name‘];echo ‘</td>‘;}echo ‘<tr/>‘;$row_num = 0;while ($row = $stmt->fetch(PDO :: FETCH_NUM)) {$row_num++;echo ‘<tr>‘;foreach ($row as $value) {echo ‘<td>‘ . $value . ‘</td>‘;}echo ‘</tr>‘;}echo ‘</table>‘;#需要統計查詢的行數echo ‘一共‘ . $row_num . ‘條記錄<br/>使用PDOStatement::rowCount來統計,一共‘ . $stmt->rowCount() . ‘條記錄‘;//5:關閉遊標$stmt->closeCursor();}//6:釋放PDO對象$pdo = null;?>

  看到上面代碼很明顯的不同在於訪問Mysql資料庫,卻再也看不到Mysql相關函數和字樣,這一點正是PDO所希望的,PDO使得PHP訪問資料庫將面向介面而不是具體的實現,這也為改變資料庫而不用擔心應用程式與資料庫過度的耦合提供了基礎。簡而言之就是做到了物件導向中的面向介面編程的原則。


  就操作資料而言,更多的是針對API來編程,具備資料庫的相關知識(主要是SQL)和熟悉相關API既可以操作資料庫,面對PHP操作資料庫的多種擴充,到底使用哪一種方式,暫時不知道,看情況吧。

本文出自 “野馬紅塵” 部落格,謝絕轉載!

[PHP]PHP編程操作Mysql資料庫的三種方式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.