本文目錄一覽:
PHP網站怎麼連接到數據庫?
常規方式
常規方式就是按部就班的讀取文件了。其餘的話和上述方案一致。
// 讀取配置文件內容
$handle = fopen(“filepath”, “r”); $content = fread($handle, filesize(“filepath”));123
PHP解析XML
上述兩種讀取文件,其實都是為了PHP解析XML來做準備的。關於PHP解析XML的方式的博客有很多。方式也有很多,像simplexml,XMLReader,DOM啦等等。但是對於比較小型的xml配置文件,simplexml就足夠了。
配置文件
?xml version=”1.0″ encoding=”UTF-8″ ?mysql
!– 為防止出現意外,請按照此標準順序書寫.其實也無所謂了 —
hostlocalhost/host
userroot/user
password123456/password
dbtest/db
port3306/port/mysql12345678910
解析
?php/**
* 作為解析XML配置文件必備工具
*/class XMLUtil {
public static $dbconfigpath = “./db.config.xml”; public static function getDBConfiguration() {
$dbconfig = array (); try { // 讀取配置文件內容
$handle = fopen(self::$dbconfigpath, “r”); $content = fread($handle, filesize(self::$dbconfigpath)); // 獲取xml文檔根節點,進而獲取相關的數據庫信息
$mysql = simplexml_load_string($content); // 將獲取到的xml節點信息賦值給關聯數組,方便接下來的方法調用
$dbconfig[‘host’] = $mysql-host; $dbconfig[‘user’] = $mysql-user; $dbconfig[‘password’] = $mysql-password; $dbconfig[‘db’] = $mysql-db; $dbconfig[‘port’] = $mysql-port; // 將配置信息以關聯數組的形式返回
return $dbconfig;
} catch ( Exception $e ) { throw new RuntimeException ( “mark讀取數據庫配置文件信息出錯!/markbr /” );
} return $dbconfig;
}
}1234567891011121314151617181920212223242526272829
數據庫連接池
對於PHP程序而言,優化永無止境。而數據庫連接池就在一定程度上起到了優化的作用。其使得對用戶的每一個請求而言,無需每次都像數據庫申請鏈接資源。而是通過已存在的數據庫連接池中的鏈接來返回,從時間上,效率上,都是一個大大的提升。
於是,這裡簡單的模擬了一下數據庫連接池的實現。核心在於維護一個“池”。
從池子中取,用畢,歸還給池子。
?php/**x
* PHP中的數據庫 工具類設計
* 郭璞
* 2016年12月23日
*
**/class DbHelper { private $dbconfig; private $dbpool; public $poolsize; public function __construct($poolsize = 20) { if (! file_exists ( “./utils.php” )) { throw new RuntimeException ( “markutils.php文件丟失,無法進行配置文件的初始化操作!/markbr /” );
}else {
require ‘./utils.php’;
} // 初始化 配置文件信息
$this-dbconfig = XMLUtil::getDBConfiguration (); // 準備好數據庫連接池“偽隊列”
$this-poolsize = $poolsize;
$this-dbpool = array (); for($index = 1; $index = $this-poolsize; $index ++) {
$conn = mysqli_connect ( $this-dbconfig [‘host’], $this-dbconfig [‘user’], $this-dbconfig [‘password’], $this-dbconfig [‘db’] ) or die ( “mark連接數據庫失敗!/markbr /” );
array_push ( $this-dbpool, $conn );
}
} /**
* 從數據庫連接池中獲取一個數據庫鏈接資源
*
* @throws ErrorException
* @return mixed
*/
public function getConn() { if (count ( $this-dbpool ) = 0) { throw new ErrorException ( “mark數據庫連接池中已無鏈接資源,請稍後重試!/mark” );
} else { return array_pop ( $this-dbpool );
}
} /**
* 將用完的數據庫鏈接資源放回到數據庫連接池
*
* @param unknown $conn
* @throws ErrorException
*/
public function release($conn) { if (count ( $this-dbpool ) = $this-poolsize) { throw new ErrorException ( “mark數據庫連接池已滿/markbr /” );
} else {
array_push ( $this-dbpool, $conn );
}
}
}
php手把手教你做網站(二十九)thinkphp6部署多個數據庫
前邊介紹了負載均衡,mysql同步,接下來介紹tp6分布式部署多個數據庫,實現讀寫分離。
tp6的分布式部署讀和寫仍然是一個系統,這裡我們分開操作,給用戶展示的就是從數據庫,後端添加文章就是主庫,然後同步到從庫。
1、配置數據庫鏈接參數
目標:實現隨機使用數據庫展示信息,只是讀操作。
測試:前台可以讀取表中內容(存放的不一致),查看是否是隨機顯示的。
打開.env文件進行編輯
說明:
2、編輯database.php
找到deploy設置為1分布式部署,下邊不要改,都是讀,寫入的也就是後端的我們單獨建站連接主庫。
配置完成,tp6使用的是mt_rand取隨機數判斷使用哪個數據庫。
3、數據庫交互寫操作
比如瀏覽量沒必要每次都去更新數據庫,可以先使用redis緩存,存夠1000的整數倍,再去更新數據庫。
4、後台獨立,也就是寫
可以前後端分離,單獨做一個網站(沒有前端)使用ip訪問或者獨立的域名連接後台。
5、上傳附件(jquery ajax跨域上傳)
使用了nginx負載均衡,肯定是多個一樣的網站,如果圖片存放到一個站,別的就不能訪問了,可以單獨設置一個附件(壓縮包,圖片等)服務器,可以使用二級域名連接,這就要求我們上傳附件的時候,是上傳到附件服務器。
jqueryURL
API控制器apdpic方法
說明:
也可以先傳到後台服務器然後使用(php)ftp上傳,或者是通過curl上傳到附件服務器,感覺那樣畢竟麻煩,直接設置跨域會比較簡單。
也測試了使用jsonp跨域,但是不能上傳附件。
6、thinkphp6實現讀寫分離(在一個站點)
我個人是不喜歡這樣的,負載均衡應該是均衡地讀,也就是前台單獨一個站點,後端的寫是另一個獨立的站點,看個人喜好吧。
獨立後台的優點:可以提升安全性,因為我們的後台網址是不公開的,避免用戶猜測一些後台的信息。
.env配置按照1所述編輯,默認第一個是主庫。
database.php
願大家在新的一年心想事成,萬事如意!!!
php可以支持目前主流的數據庫
php支持的數據庫有很多噢,下面列舉一下!
MySQL
MySQL 是最流行的關係型數據庫管理系統,在 WEB 應用方面 MySQL 是最好的 RDBMS(Relational Database Management System:關係數據庫管理系統)應用軟件之一。
MsSql
ms SQL是指微軟的SQLServer數據庫服務器,它是一個數據庫平台,提供數據庫的從服務器到終端的完整的解決方案,其中數據庫服務器部分,是一個數據庫管理系統,用於建立、使用和維護數據庫。
Oracle
oracle是甲骨文公司的一款關係數據庫管理系統。它是在數據庫領域一直處於領先地位的產品。可以說Oracle數據庫系統是目前世界上流行的關係數據庫管理系統,系統可移植性好、使用方便、功能強,適用於各類大、中、小、微機環境。它是一種高效率、可靠性好的、適應高吞吐量的數據庫方案。
Access
Access是由微軟發布的關係數據庫管理系統。它結合了 MicrosoftJet Database Engine 和 圖形用戶界面兩項特點,是 Microsoft Office 的系統程序之一。
PostgreSQL
PostgreSQL是一種特性非常齊全的自由軟件的對象-關係型數據庫管理系統(ORDBMS),是以加州大學計算機系開發的POSTGRES,4.2版本為基礎的對象關係型數據庫管理系統。POSTGRES的許多領先概念只是在比較遲的時候才出現在商業網站數據庫中。
InterBase
InterBase是一種關係數據管理系統(Relational database management system RDBMS),它提供了在單機或多用戶環境中的快速數據處理及共享的工具。InterBase的核心是提供透明的多機種支持的網絡運行服務器技術。InterBase是可以在Windows 95、Windows NT、Novell NetWare及多種UNIX操作系統上運行的工具。
CUBRID
CUBRID是一個全面開源,且完全免費的關係數據庫管理系統。
dBase
dBase是第一個在個人電腦上被廣泛使用的單機版數據庫系統。
Firebird/InterBase
Firebird特性介紹firebird是一個全功能的,強大高效的,輕量級,免維護的數據庫。
IBM DB2
IBM DB2 是美國IBM公司開發的一套關係型數據庫管理系統
Informix
Informix是IBM公司出品的關係數據庫管理系統(RDBMS)家族。
MaxDB
MaxDB是一種企業級數據庫管理系統。
MongoDB
MongoDB 是一個基於分布式文件存儲的數據庫。
mSQL
mSQL(mini SQL)是一個單用戶數據庫管理系統,個人使用免費,商業使用收費。由於它的短小精悍,使其開發的應用系統特別受到互聯網用戶青睞。
SQLite
SQLite,是一款輕型的數據庫,是遵守ACID的關係型數據庫管理系統,它包含在一個相對小的C庫中。
SQLSRV
SQL Server(SQLSRV )是由Microsoft開發和推廣的關係數據庫管理系統(RDBMS)。
Sybase
美國Sybase公司研製的一種關係型數據庫系統,是一種典型的UNIX或WindowsNT平台上客戶機/服務器環境下的大型數據庫系統。
tokyo_tyrant
一個可持久化數據的,好處是速度不錯,而且大至兼容Memcached的文本協議,客戶端可以繼續使用SpyMemcached。
希望對你有幫助,謝謝採納!
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/290695.html