当前位置:首页 » 数据仓库 » 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();
}
?