新聞中心
PHP數(shù)據(jù)庫連接的封裝簡(jiǎn)介

站在用戶的角度思考問題,與客戶深入溝通,找到無為網(wǎng)站設(shè)計(jì)與無為網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站建設(shè)、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋無為地區(qū)。
PHP是一種廣泛應(yīng)用于網(wǎng)站開發(fā)的服務(wù)器腳本語言,而數(shù)據(jù)庫則是網(wǎng)站的重要數(shù)據(jù)存儲(chǔ)方式。為了簡(jiǎn)化PHP連接數(shù)據(jù)庫的過程,開發(fā)者們通常會(huì)進(jìn)行數(shù)據(jù)庫連接的封裝。本文將介紹PHP數(shù)據(jù)庫連接的封裝方式以及其優(yōu)勢(shì)。
一、PHP數(shù)據(jù)庫連接的基本原理
在PHP中使用數(shù)據(jù)庫需要連接數(shù)據(jù)庫,通過連接之后可以進(jìn)行增、刪、改、查等操作,連接的方法有兩種:MySQLi和PDO。其中,MySQLi是MySQL的擴(kuò)展庫,而PDO是PHP的數(shù)據(jù)對(duì)象擴(kuò)展庫,可以支持眾多數(shù)據(jù)庫,如MySQL、SQLite、Oracle等。連接數(shù)據(jù)庫的基本語法如下:
“`
//連接MySQL數(shù)據(jù)庫
$servername = “l(fā)ocalhost”;
$username = “root”;
$password = “root”;
$dbname = “test”;
//創(chuàng)建連接
$conn = new mysqli($servername, $username, $password, $dbname);
//檢測(cè)連接
if ($conn->connect_error) {
die(“連接失敗:” . $conn->connect_error);
}
echo “連接成功”;
?>
“`
以上就是使用MySQLi連接MySQL數(shù)據(jù)庫的基本語法。
二、PHP數(shù)據(jù)庫連接的封裝
通常在開發(fā)中,我們需要連接多個(gè)數(shù)據(jù)庫,如果在每個(gè)PHP文件中都進(jìn)行一遍數(shù)據(jù)庫連接,不僅麻煩,而且容易出現(xiàn)代碼冗余,降低開發(fā)效率。因此,我們可以將數(shù)據(jù)庫連接封裝成一個(gè)類或者函數(shù),使代碼更加簡(jiǎn)潔易懂。以下是一個(gè)使用MySQLi連接數(shù)據(jù)庫的封裝類:
“`
class DB {
private $host = “l(fā)ocalhost”; //數(shù)據(jù)庫主機(jī)
private $username = “root”; //數(shù)據(jù)庫用戶名
private $password = “root”; //數(shù)據(jù)庫密碼
private $dbname = “test”; //數(shù)據(jù)庫名
private $port = 3306; //數(shù)據(jù)庫端口
private $conn = null; //連接對(duì)象
private $stmt = null; //預(yù)處理對(duì)象
public function __construct() {
$this->conn = new mysqli($this->host, $this->username, $this->password, $this->dbname, $this->port);
if ($this->conn->connect_error) {
die(“連接失?。骸?. $this->conn->connect_error);
}
}
public function __destruct() {
$this->close();
}
//執(zhí)行查詢語句并返回結(jié)果集
public function query($sql) {
$this->stmt = $this->conn->query($sql);
if (!$this->stmt) {
die(“查詢失敗”);
}
return $this->stmt;
}
//執(zhí)行插入語句并返回插入后的自增ID
public function insert($sql) {
$this->stmt = $this->conn->query($sql);
if (!$this->stmt) {
die(“插入失敗”);
}
return $this->conn->insert_id;
}
//關(guān)閉連接對(duì)象
private function close() {
if ($this->stmt) {
$this->stmt->close();
}
$this->conn->close();
$this->stmt = null;
$this->conn = null;
}
}
?>
“`
使用該類連接數(shù)據(jù)庫的代碼如下:
“`
require_once(‘DB.php’);
$db = new DB();
$sql = “SELECT * FROM users”;
$result = $db->query($sql);
while ($row = $result->fetch_assoc()) {
echo $row[‘username’];
}
$db->close();
?>
“`
通過以上代碼,我們可以看到數(shù)據(jù)庫連接已經(jīng)被封裝,我們只需要實(shí)例化DB類即可,這樣極大地簡(jiǎn)化了代碼,提高了工作效率。
三、PHP數(shù)據(jù)庫連接封裝的優(yōu)勢(shì)
1.簡(jiǎn)化代碼。通過封裝,可以消除數(shù)據(jù)庫連接代碼的冗余,同時(shí)提高代碼的易讀性和可維護(hù)性。
2.提高安全性。通過封裝,可以把數(shù)據(jù)庫連接信息存儲(chǔ)在類或函數(shù)中,不容易被惡意使用者窺視,從而提高了網(wǎng)站的安全性。
3.提高性能。在封裝過程中,可以實(shí)現(xiàn)連接池等技術(shù),提高數(shù)據(jù)庫連接的效率,從而提高網(wǎng)站的訪問速度。
四、結(jié)論
本文簡(jiǎn)要介紹了PHP數(shù)據(jù)庫連接的封裝方式以及其優(yōu)勢(shì)。通過封裝,可以消除數(shù)據(jù)庫連接代碼的冗余,提高代碼的可讀性和可維護(hù)性,同時(shí)也提高了網(wǎng)站的安全性和性能。希望讀者能夠掌握PHP數(shù)據(jù)庫連接的封裝技巧,為網(wǎng)站開發(fā)注入一份高效與快樂。
相關(guān)問題拓展閱讀:
- php 使用類連接數(shù)據(jù)庫報(bào)錯(cuò)Fatal error: Allowed memory size ofbytes exhausted (tried to alloc
- php怎么用mysqli鏈接數(shù)據(jù)庫和輸出sql
php 使用類連接數(shù)據(jù)庫報(bào)錯(cuò)Fatal error: Allowed memory size ofbytes exhausted (tried to alloc
你這個(gè)php版本有bug,之前我的滑跡握服務(wù)器上也經(jīng)常出現(xiàn)這個(gè),我換信慶了成了php-5.2.17-Win32-VC6-x86.zip這個(gè)版本就州銷好了!
Fatal error: Allowed memory size ofbytes exhausted (tried to allocatebytes) in D:\wamp\www\ckly.php on line 43
從錯(cuò)誤提示來看,是指php設(shè)置薯兆的8M內(nèi)存已經(jīng)耗盡。
但錯(cuò)誤提示的 ckly.php 第 43 行,這個(gè)錯(cuò)誤的行號(hào)比較奇怪,從你給出的源代碼來看這個(gè)43行是不存在的。
由于本地沒有mssql環(huán)境,不能測(cè)試,以下是我用mysql環(huán)境編寫的代碼,經(jīng)測(cè)試通過運(yùn)行正常,供參考:
host = $host;
$this->dbbase = $dbbase;
$this->dbpassword = $dbpassword;
$this->connnect();
}
//進(jìn)行連接
function connnect()
{
//打開連接
$this->conn = mysql_connect($this->host, $this->dbbase, $this->dbpassword) or die(“連接失敗”);
mysql_select_db(‘books’, $this->conn) or die(“連接數(shù)據(jù)庫失敗”);
}
function showdata()
{
$rows = mysql_query(‘SELECT * FROM customers’,$this->conn);
echo ‘姓名年齡’;
while($row = mysql_fetch_assoc($rows)){
echo ”.$row.”;
echo ‘清輪’.$row.”;
}
}
}
$p = new db_mysql(‘localhost’, ‘test’, ‘test’); //進(jìn)行實(shí)例化
$p->showdata();
?>
你的類名字: db_mssql
你實(shí)際實(shí)例化的類是:db_mysql
至于出現(xiàn)這樣的情況,比較奇怪,和內(nèi)存關(guān)系不大。應(yīng)該是你的版本太低了。
我改了一個(gè)類:
‘mysql_close’,’conn’=>’mysql_connect’,’select_db’=>’mysql_select_db’,’鎮(zhèn)虛query’=>’mysql_query’,’array’=>’mysql_fetch_array’);//封裝內(nèi)置函數(shù)的數(shù)組,這樣便于管理
$this->host = $host;
$this->dbbase = $dbbase;
$this->dbpassword = $dbpassword;
$this->db_array=$db_array;
//11-14行是為了 把讓變量能在類中傳遞
$this->connnect();#調(diào)用這個(gè)類(神旅姿我自己)的connect函數(shù)
}
function connnect(){
//打開連接
$conn= $this->db_array($this->host,$this->dbbase,$this->dbpassword) or die(“連接失敗”);
$this->db_array(‘mysql’,$conn)or die (“連接數(shù)據(jù)庫失敗”);
$this->conn=$conn;
}
function query($sql){#用于測(cè)試的,執(zhí)行SQL語句
return $this->result=$this->db_array($sql);
}
function fetch_array(){#返回?cái)?shù)組
return $this->db_array($this->result);
}
function __destruct()
{
$this->db_array($this->conn) or die (“清理失敗”);#關(guān)閉連接
}
}
$p = new db_mysql(‘127.0.0.1′,’root’,”); //進(jìn)行實(shí)例化
$p->query(“show databases”);#執(zhí)行查詢所有數(shù)據(jù)庫
while($r=$p->fetch_array()){#顯示
echo $r.”;
}#能顯示說明能執(zhí)行SQL語句,你可以自己一步一步完善
php怎么用mysqli鏈接數(shù)據(jù)庫和輸出sql
一、mysql與mysqli的概念相關(guān):
1、mysql與mysqli都是php方面的函數(shù)集,與mysql數(shù)據(jù)庫關(guān)聯(lián)不大。
2、在php5版本之前,一般是用php的mysql函數(shù)去驅(qū)動(dòng)mysql數(shù)據(jù)庫的,比如mysql_query()的函數(shù),屬于面向過程3、在php5版本以后,寬明增加了mysqli的函數(shù)功能,某種意義上講,它是mysql系統(tǒng)函數(shù)的增強(qiáng)版,更穩(wěn)定更高效更安全,與mysql_query()對(duì)應(yīng)的有mysqli_query(),屬于面向?qū)ο?,用?duì)象的方式操作驅(qū)動(dòng)mysql數(shù)據(jù)庫
二、mysql與mysqli的區(qū)別:
1、mysql是非持繼連接函數(shù),mysql每次鏈接都會(huì)打開一個(gè)連接的進(jìn)程。
2、mysqli是永遠(yuǎn)連接函數(shù),mysqli多次運(yùn)行mysqli將使用同一連接進(jìn)程,從而減少了服務(wù)器的開銷。mysqli封裝了諸如事務(wù)等一些高級(jí)操作,同時(shí)封裝了DB操作過程中的很多可用的方法。
三、mysql與mysqli的用法:
1:mysql(過程方式讓局):
$conn =
mysql_connect(‘localhost’, ‘user’, ‘password’); //連接mysql數(shù)據(jù)庫 mysql_select_db(‘data_base’);
//選擇數(shù)據(jù)庫 $result =
mysql_query(‘select * from data_base’);//第二個(gè)可選參數(shù),指定打開的連接 $row =
mysql_fetch_row( $result ) ) //只取一行數(shù)據(jù) echo
$row; //輸出之一個(gè)字段的值
PS:mysqli以過程式的方式操作,有些函數(shù)必須指定資源,比如mysqli_query(資源標(biāo)識(shí),SQL語句),并且資源標(biāo)識(shí)的參數(shù)是放在前面的,而mysql_query(SQL語句,’資源標(biāo)識(shí)’)的資源標(biāo)識(shí)是可選的,默認(rèn)值是上慎滑告一個(gè)打開的連接或資源。
2、mysqli(對(duì)象方式):
$conn = new
mysqli(‘localhost’, ‘user’, ‘password’,’data_base’); //要使用new操作符,最后一個(gè)參數(shù)是直接指定數(shù)據(jù)庫 //假如構(gòu)造時(shí)候不指定,那下一句需要$conn -> select_db(‘data_base’)實(shí)現(xiàn) $result =
$conn -> query( ‘select * from data_base’ ); $row =
$result -> fetch_row(); //取一行數(shù)據(jù) echo
row; //輸出之一個(gè)字段的值
使用new mysqli(‘localhost’, usenamer’, ‘password’, ‘databasename’);會(huì)報(bào)錯(cuò),提示如下:
Fatal error: Class ‘mysqli’ not found in …
一般是mysqli是沒有開啟的,因?yàn)閙ysqli類不是默認(rèn)開啟的,win下要改php.ini,去掉php_mysqli.dll前的;,linux下要把mysqli編譯進(jìn)去。
四、mysql_connect()與mysqli_connect()
1.使用mysqli,可以把數(shù)據(jù)庫名稱當(dāng)作參數(shù)傳給mysqli_connect()函數(shù),也可以傳遞給mysqli的構(gòu)造函數(shù);
關(guān)于php 數(shù)據(jù)庫連接 封裝的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都網(wǎng)站設(shè)計(jì)制作選創(chuàng)新互聯(lián),專業(yè)網(wǎng)站建設(shè)公司。
成都創(chuàng)新互聯(lián)10余年專注成都高端網(wǎng)站建設(shè)定制開發(fā)服務(wù),為客戶提供專業(yè)的成都網(wǎng)站制作,成都網(wǎng)頁設(shè)計(jì),成都網(wǎng)站設(shè)計(jì)服務(wù);成都創(chuàng)新互聯(lián)服務(wù)內(nèi)容包含成都網(wǎng)站建設(shè),小程序開發(fā),營銷網(wǎng)站建設(shè),網(wǎng)站改版,服務(wù)器托管租用等互聯(lián)網(wǎng)服務(wù)。
網(wǎng)站標(biāo)題:「PHP數(shù)據(jù)庫連接的封裝簡(jiǎn)介」 (php 數(shù)據(jù)庫連接 封裝)
網(wǎng)頁鏈接:http://www.5511xx.com/article/cciihds.html


咨詢
建站咨詢
