UCHome针对MySQL数据库实现了一个封装类,没有使用ADODB或者PEAR这样的开源数据库框架,这样做的好处是文件非常少,空间非常小。
1. 数据库配置
和很多的PHP项目一样,UCHome的数据库配置放在了配置文件config.php中,从第9行到16行:
$_SC['dbhost'] = 'localhost'; //督???? $_SC['dbuser'] = 'root'; $_SC['dbpw'] = ''; $_SC['dbcharset'] = 'utf8'; $_SC['pconnect'] = 0; $_SC['dbname'] = 'comsenz'; $_SC['tablepre'] = 'uchome_'; $_SC['charset'] = 'utf-8'; config.php的内容由安装程序写入,写入后由common.php引入,引入后的内容存放在全局变量$_SC中。
2. 数据库连接
在common.php的第42行,有这样一个函数调用:dbconnect();
函数dbconnect()的作用就是执行数据库连接处理,其定义在function_common.php(该文件由common.php引入)的第108行到118行:
function dbconnect() { global $_SGLOBAL, $_SC; include_once(S_ROOT.'./source/class_mysql.php'); if(empty($_SGLOBAL['db'])) { $_SGLOBAL['db'] = new dbstuff; $_SGLOBAL['db']->charset = $_SC['dbcharset']; $_SGLOBAL['db']->connect($_SC['dbhost'], $_SC['dbuser'], $_SC['dbpw'], $_SC['dbname'], $_SC['pconnect']); } }
source/class_mysql.php是UCHome的MySQL封装类,从上面的函数定义可以看到,MySQL的封装类类名是dbstuff,dbconnect()函数创建了该类的一个实例,然后设置字符编码和执行连接,类实例放在了$_SGLOBAL['db']。
3. 表明前缀
很多的PHP项目都可以配置表明前缀,这样做的目的是可以在一个数据库里面实现同一个程序的多次安装,UCHome也可以。UCHome的表明前缀是通过$_SC['tablepre']配置的,默认值为uchome_。执行SQL查询时,通过调用函数tname()来增加前缀。
函数tname()的定义在function_common.php的第216行到219行:
function tname($name) { global $_SC; return $_SC['tablepre'].$name; }
具体用法:
$query = $_SGLOBAL['db']->query("SELECT * FROM ".tname('magicinlog');
4. 数据库查询
一个数据库查询的例子:
$query = $_SGLOBAL['db']->query("SELECT * FROM ".tname('magicinlog'); while ($value = $_SGLOBAL['db']->fetch_array($query)) { $list[] = $value; }