當前位置:首頁 » 數據倉庫 » php資料庫工具類
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

php資料庫工具類

發布時間: 2023-07-22 09:41:24

① 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>
<!-- 為防止出現意外,請按照此標准順序書寫.其實也無所謂了 -->
<host>localhost</host>
<user>root</user>
<password>123456</password>
<db>test</db>
<port>3306</port></mysql>12345678910

解析

<?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>讀取資料庫配置文件信息出錯!</mark><br />" );
} return $dbconfig;
}
}

資料庫連接池

對於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 ( "<mark>utils.php文件丟失,無法進行配置文件的初始化操作!</mark><br />" );
}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>連接資料庫失敗!</mark><br />" );
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>資料庫連接池已滿</mark><br />" );
} else {
array_push ( $this->dbpool, $conn );
}
}
}

② php中選擇打開資料庫的方法是

  • 在mysql資料庫中,創建一個test資料庫,用於測試。

  • 總結:

  • 1、創建一個test資料庫。

    2、使用mysql_connect()函數創建一個資料庫的連接。

    3、再使用mysql_select_db()函數選擇要操作的資料庫test,並通過if語句判斷結果。

③ php 連接資料庫類

我也剛剛學PHP,正在研究中,雖然你只給10分........
首先,將代碼保存到一個文件,如:mysql.class.php
其次,在一個常用的文件里調用:比如頭部文件header.php,因為我放在根目錄所以用下面方式導入其他文件:
require dirname(__FILE__) . 'include/config.php';
//導入類文件
require dirname(__FILE__) . 'include/mysql.class.php';
//定義一個類及初始化資料庫類
$db = new mysql($db_host, $db_user, $db_pass, $db_name);
$db_host = $db_user = $db_pass = $db_name = NULL;

然後,在test.php文件調用:
require_once dirname(__FILE__) . '/header.php';
使用方法:
$sql = "讀取表";
$res = $db->query($sql);
$info = array();//定義數組
while($row=$db->fetchRow($res))
{
$arr['id'] = $row['id'];
$arr['title'] = $row['title'];
$info[] = $arr;
}
可以在顯示的地方用:
foreach($info as $i)
{
echo $i['title']."<br />";
}
或是直接使用while

還用另一種調用方式:
$here_area = $db->getRow("select areaid,areaname from {$table}area where areaid='$areaid'");
$here[] = array('name'=>$here_area['areaname'],'id'=>$here_area['areaid']);

測試通過,因為我正在使用.....................................

config.php代碼:
<?php
$db_host = "localhost";
$db_name = "test";
$db_user = "root";
$db_pass = "";
$table = "mini_";
$charset = "gb2312";
$dbcharset = "gbk";
?>

mysql.class.php代碼:

<?php
class mysql
{
var $link = NULL;
//自動執行__construct php5類構建方法,如果PHP4和PHP5同時使用會自動使用PHP5的方法
function __construct($dbhost, $dbuser, $dbpw, $dbname = '', $pconnect = 0, $quiet = 0)
{
//自動執行時調用mysql函數
$this->mysql($dbhost, $dbuser, $dbpw, $dbname, $pconnect, $quiet);
}

//php4類構建方法,如果沒有 __construct 就自動執行此功能
function mysql($dbhost, $dbuser, $dbpw, $dbname = '', $pconnect = 0, $quiet = 0)
{
if ($quiet)
{
$this->connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect, $quiet);
}
else
{
$this->settings = array(
'dbhost' => $dbhost,
'dbuser' => $dbuser,
'dbpw' => $dbpw,
'dbname' => $dbname,
'charset' => $charset,
'pconnect' => $pconnect
);
}
}

function connect($dbhost, $dbuser, $dbpw, $dbname = '', $pconnect = 0, $quiet = 0)
{
global $dbcharset;
if ($pconnect)
{
if (!($this->link = @mysql_pconnect($dbhost, $dbuser, $dbpw)))
{
if (!$quiet)
{
$this->ErrorMsg("Can't pConnect MySQL Server($dbhost)!");
}
return false;
}
}
else
{
if (PHP_VERSION >= '4.2')
{
$this->link = @mysql_connect($dbhost, $dbuser, $dbpw, true);
}
else
{
$this->link = @mysql_connect($dbhost, $dbuser, $dbpw);
mt_srand((double)microtime() * 1000000);
}
if (!$this->link)
{
if (!$quiet)
{
$this->ErrorMsg("Can't Connect MySQL Server($dbhost)!");
}
return false;
}
}

$this->dbhash = md5($this->root_path . $dbhost . $dbuser . $dbpw . $dbname);
$this->version = mysql_get_server_info($this->link);
if ($this->version > '4.1')
{
if ($dbcharset != 'latin1')
{
mysql_query("SET character_set_connection=$dbcharset, character_set_results=$dbcharset, character_set_client=binary", $this->link);
}
if ($this->version > '5.0.1')
{
mysql_query("SET sql_mode=''", $this->link);
}
}

if ($dbname)
{
if (mysql_select_db($dbname, $this->link) === false )
{
if (!$quiet)
{
$this->ErrorMsg("Can't select MySQL database($dbname)!");
}

return false;
}
else
{
return true;
}
}
else
{
return true;
}
}

function query($sql, $type = '')
{
if ($this->link === NULL)
{
$this->connect($this->settings['dbhost'], $this->settings['dbuser'], $this->settings['dbpw'], $this->settings['dbname'], $this->settings['charset'], $this->settings['pconnect']);
$this->settings = array();
}
if ($this->queryCount++ <= 99)
{
$this->queryLog[] = $sql;
}
if ($this->queryTime == '')
{
if (PHP_VERSION >= '5.0.0')
{
$this->queryTime = microtime(true);
}
else
{
$this->queryTime = microtime();
}
}
if (!($query = mysql_query($sql, $this->link)) && $type != 'SILENT')
{
$this->error_message[]['message'] = 'MySQL Query Error';
$this->error_message[]['sql'] = $sql;
$this->error_message[]['error'] = mysql_error($this->link);
$this->error_message[]['errno'] = mysql_errno($this->link);

$this->ErrorMsg();

return false;
}
return $query;
}

function affected_rows()
{
return mysql_affected_rows($this->link);
}
function num_fields($query)
{
return mysql_num_fields($query);
}
function error()
{
return mysql_error($this->link);
}

function errno()
{
return mysql_errno($this->link);
}

function num_rows($query)
{
return mysql_num_rows($query);
}

function insert_id()
{
return mysql_insert_id($this->link);
}

function fetchRow($query)
{
return mysql_fetch_assoc($query);
}

function fetcharray($query)
{
return mysql_fetch_array($query);
}

function version()
{
return $this->version;
}

function close()
{
return mysql_close($this->link);
}

function ErrorMsg($message = '', $sql = '')
{
if ($message)
{
echo "$message\n\n";
}
else
{
echo "<b>MySQL server error report:";
print_r($this->error_message);
}

exit;
}

function getCol($sql)
{
$res = $this->query($sql);
if ($res !== false)
{
$arr = array();
while ($row = mysql_fetch_row($res))
{
$arr[] = $row[0];
}

return $arr;
}
else
{
return false;
}
}
function getOne($sql, $limited = false)
{
if ($limited == true)
{
$sql = trim($sql . ' LIMIT 1');
}

$res = $this->query($sql);
if ($res !== false)
{
$row = mysql_fetch_row($res);

if ($row !== false)
{
return $row[0];
}
else
{
return '';
}
}
else
{
return false;
}
}

function getAll($sql)
{
$res = $this->query($sql);
if ($res !== false)
{
$arr = array();
while ($row = mysql_fetch_assoc($res))
{
$arr[] = $row;
}

return $arr;
}
else
{
return false;
}
}

//使用: getRow($sql,true) 如果有true那值是 limit 1,讀取一條信息
function getRow($sql, $limited = false)
{
if ($limited == true)
{
$sql = trim($sql . ' LIMIT 1');
}

$res = $this->query($sql);
if ($res !== false)
{
return mysql_fetch_assoc($res);
}
else
{
return false;
}
}
}
?>

④ php中關於資料庫的操作(php操作mysql資料庫)

PHP開始~

將php-5.2.1-Win32.zip解壓到准備用於安裝PHP的目錄,這里我就解壓到D:wwwphp;找到php目錄下php.ini-dist文件,改名為php.ini;

用記事本打開php.ini,查找以下幾行:

;extension=php_gd2.dll

;extension=php_mcrypt.dll

;extension=php_mysql.dll

去掉前面的分號.這樣做的目的是讓php載入mcrypt和mysql等各種模塊,在需要的時候可以隨時配置;

其他的比如

post_max_size=8M

upload_max_filesize=2M

都可以按實際情況進差粗行設置.

最後保存,也不需要復制任何文件到系統目錄,這樣PHP基本上就OK了!

MySQL

1、安裝

解壓mysql-5.2.3-falcon-alpha-win32.zip得到一個setup.exe安裝文件,運行之開始安裝MySQLServer5.2;

第一步選擇安裝模式,選擇Custom習慣安裝,Next進入下一步;

這一步選擇安裝內容:仍然虛塵鎮MySQLServer完整安裝,主要是自定義下面的安裝目錄,我安裝在D:wwwMySQL5.2點擊Next進入下一步;

Install開始安裝,稍候會提示注冊MySQL帳戶,SKIP即可;

完成安裝,勾選ConfiguretheMySQLServernow,Finish並進入MySQL配置;

2、配置

完成安裝時若勾選了ConfiguretheMySQLServernow,點擊Finish便可直接進入MySQLServerInstanceWizard;否則就需要在MySQL安裝目錄in下找到並運行.exe進入設置.

點Next開始配置,第一步選擇配置模式,這里我已經安裝了MySQL,所以選擇第一種Detailed模式,Next進入下一步;

這一步selectaservertype,不同的選擇決定MySQL佔用不同的系統內存和CPU資源,這里我選的是DeveloperMachine;

繼續Next,選擇資料庫用途,我選的是多功能型的;

下一步設定InnoDB引擎的存儲目錄,我設置的是D:wwwMySQL5.2InnoDBDatafiles,點擊Next進入下一步;

設置MySQL資料庫的並發連接數,這里需要了解什麼是並發連接數,可根據實際情況進行設定.我這里選的是ManualSetting,並且設置連接數為10000;

Next進入下一步,setthenetworkingoptions,採用默認的,繼續Next;

設置默認語言,選擇第三個,設定character為gbk;

Next將MySQL設置為Windows系統服務,採用默認的,Next進入下一步;

選擇設置root帳戶密碼,或者可以同時新建一個匿名帳戶Anonymous.值得注意的是設置root密碼的下面有一個小選項,是否允許root用戶從別的計算機登陸,為了方便可以勾選上,為了安全兄鎮當然最好就別選;

進入下一步PressExecute開始配置,完成Finish關閉設置向導`~

OK!

⑤ PHP 開發中資料庫及其相關軟體的選型考慮


PHP 版本各異,已經停止升級開發的有 4.0 系列的 4.4.x,但現在還有部分生產環境在跑這個版本,需要繼續維護代碼。PHP 5.0 系列是現在開發和應用的主流版本,有 5.1.x 和 5.2.x 系列。PHP 6.0 目前還是試用版本,用 PHP 開發軟體產品的人現在可以預先作兼容性測試。
PHP 支持的資料庫很多,包括 PHP 本身自帶的資料庫驅動組件,例如 mysql.dll、oci_oracle 等。PHP 從 5.1 版本以後正余裂在力推其通用的資料庫驅動組件 PDO,通過這個高度抽象的資料庫存取組件,PHP 可以支持目前絕大多數資料庫產品,而且這個數量還在增加,具有極大的擴展性。而第三方廠家很早就在開發 ADODB 資料庫存取組件,現在仍然在繼續進展中。
PHP 自身支持的資料庫組件,目前最流行的是仔模 MySQL 組件。PHP4.0 和 5.0 版本對 Oracle 的支持使用了不同的函數組,5.0 兼容 4.0,但函數名已經更換了。PHP4.0 用的是 OCILogon()、OCIParse()、OCIExecute()、OCIFetchInto()等函數。而 PHP5.0 用的是 oci_connect()、oci_parse、oci_bind_by_name()、oci_execute()、oci_fetch_all()等等函數,能看出來是向 MySQL 的函數命名靠攏。這些函數是用 C 語言對 PHP 進行擴展開發的,理論上效率最高,但也許因為資料缺乏等原因,使用的人似乎並不見多。其針對 Oracle 表的分頁代碼等,也比較復雜。
而 ADODB 組件和 Windows 下
使用的 ADO 組件包裝幾乎是一模一樣的,做過
+ ACCESS/MS-SQLServer 開發的人應該似曾相識,很容易上手。所以,用 PHP 做 MS-SQLServer 或 oracle 開發,ADODB 應該是考慮之列。ADODB 對 PHP 的 4.0 和 5.0 版本均支持,而 PDO 僅僅支持 PHP 的 5.1 以上版本,這一點也應該考慮,做項目的問題不大,做產品的,就要考慮版本的適用性和軟體的部署環境了。
一段 PHP 使用 ADODB 組件存取 Oracle9i 資料庫的代碼示例:
?php
require_once(」adodb/adodb.inc.php」); //包含ADODB類庫
$db = ADONewConnection(」oci8″); //指定Oracle8.0以上數念毀緩據庫
$db-Connect(」mydb9″, 「scott」, 「tiger」); //三個參數分別是資料庫網路服務名、用戶(方案)和密碼
$rs = $db-Execute(」select * from emp」); //執行SQL語句
//取記錄中的數據
while (!$rs-EOF)
{
echo $rs-fields[JOB] .』br』;
$rs-MoveNext();
}
?