项目架构问题 本帖最后由 dld11111 于 2010-06-17 16:47:15 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 目录问题在配置文件里配置就行,至于连接数据库就将不同的资源链接惊醒__sleep and __wakeup解决或者存到$_SESSION里都可以的 1,可以的2。四个数据,如果每个域名只调用一个库,那include下个一个DB类一次即可,在里分逻辑。如果一个域外要用到四个数据库。这个不知道大家是如何解决的?架构如何设计? 还一种方法sQL指定数据库和表跨数据库查询时,有这么一个问题,可能会更改select_db,即默认数据库,这个有没有好办法?所以,分别声明四个也可能是最佳的。期待更好办法? 可是用select_db会不会出现并发操作错误的问题? 我以前遇到过这个问题,当换另一个数据库时,他更改了默认数据库,所以后面的的查询全出错,解决办法是表前加数据库名,不能select_db。 嵌入文件中$db = new Db_class(...,$dbname);调用文件中$dbname = '数据库名';include '嵌入文件';... 第二个可以做个工厂模式 再配合单例模式简单的说就是做一个方法,这个方法会返回一个db的实例,根据传入的参数的不同返回不同的数据库连接实例。再配合上单例模式,即同一个数据库的连接就返回同一个连接。大致如下:配置信息可以考虑写在外面的config文件里面,在这里再载入进来class FtyMsDb{ private static $MsDb = null; //数据库前缀 private static $MsDbPriv = "UFDATA_"; //数据库对应配置信息信息 private static $MsSqlServerInfo = array( '121_2010'=>array('host'=>'localhost','user'=>'sa','pw'=>''), '122_2010'=>array('host'=>'localhost','user'=>'sa','pw'=>'') ); /** * 获取一个Ms数据库连接 * * @param unknown_type $type * @return MsDb */ public static function GetMsDb($type){ if(self::$MsDb[$type]!==null){ return self::$MsDb[$type]; } $MsServerinfo = self::$MsSqlServerInfo[$type]; if(empty($MsServerinfo)){ return null; } $MsDb = new MsDb(); if($MsDb->New_connect($MsServerinfo['host'],$MsServerinfo['user'],$MsServerinfo['pw'],self::$MsDbPriv.$type)===false){ return null; } self::$MsDb[$type] = $MsDb; return $MsDb; } /** * 根据传入的MsSql连接数据生成一个新的MsSql数据库连接 * * @param 连接标识 $Name * @param 数据库地址 $Host * @param 用户名 $User * @param 密码 $Password * @param 连接数据库名 $DbName * @return MsDb */ public static function GetNewMsDb($Name,$Host,$User,$Password,$DbName){ if(self::$MsDb[$Name]!==null){ return self::$MsDb[$Name]; } $MsDb = new MsDb(); if($MsDb->New_connect($Host,$User,$Password,$DbName)===false){ return null; } self::$MsDb[$type] = $MsDb; return $MsDb; }} 怎么不让php自动把×换成×号 PHP没有加载MYSQL,都该了,就不知道哪里错了,请帮下吧? 高手进来一下,谢谢 php 如何清空TXT 文件内容 如何修改 fckeditor 庆祝网站上线,散分喽!!!人人有份!! 网站基于php,欢迎高手多多指教,谢谢啊~~~ TOM在线搜索引擎频道招聘信息 用PHP写个代理一样的东西? 一个关于页面跳转的问题 PHP 读取excel 内容写入数据库 服务器向终端JS传递数据,为何放入实际服务器中不能用? 判断字符串中是否含有标点符号,在线等
2。四个数据,如果每个域名只调用一个库,那include下个一个DB类一次即可,在里分逻辑。如果一个域外要用到四个数据库。这个不知道大家是如何解决的?架构如何设计?
当换另一个数据库时,他更改了默认数据库,所以后面的的查询全出错,解决办法是表前加数据库名,不能select_db。
$db = new Db_class(...,$dbname);调用文件中
$dbname = '数据库名';
include '嵌入文件';
...
简单的说就是做一个方法,这个方法会返回一个db的实例,根据传入的参数的不同返回不同的数据库连接实例。
再配合上单例模式,即同一个数据库的连接就返回同一个连接。
大致如下:配置信息可以考虑写在外面的config文件里面,在这里再载入进来class FtyMsDb{
private static $MsDb = null;
//数据库前缀
private static $MsDbPriv = "UFDATA_";
//数据库对应配置信息信息
private static $MsSqlServerInfo = array(
'121_2010'=>array('host'=>'localhost','user'=>'sa','pw'=>''),
'122_2010'=>array('host'=>'localhost','user'=>'sa','pw'=>'')
);
/**
* 获取一个Ms数据库连接
*
* @param unknown_type $type
* @return MsDb
*/
public static function GetMsDb($type){
if(self::$MsDb[$type]!==null){
return self::$MsDb[$type];
}
$MsServerinfo = self::$MsSqlServerInfo[$type];
if(empty($MsServerinfo)){
return null;
}
$MsDb = new MsDb();
if($MsDb->New_connect($MsServerinfo['host'],$MsServerinfo['user'],$MsServerinfo['pw'],self::$MsDbPriv.$type)===false){
return null;
}
self::$MsDb[$type] = $MsDb;
return $MsDb;
}
/**
* 根据传入的MsSql连接数据生成一个新的MsSql数据库连接
*
* @param 连接标识 $Name
* @param 数据库地址 $Host
* @param 用户名 $User
* @param 密码 $Password
* @param 连接数据库名 $DbName
* @return MsDb
*/
public static function GetNewMsDb($Name,$Host,$User,$Password,$DbName){
if(self::$MsDb[$Name]!==null){
return self::$MsDb[$Name];
}
$MsDb = new MsDb();
if($MsDb->New_connect($Host,$User,$Password,$DbName)===false){
return null;
}
self::$MsDb[$type] = $MsDb;
return $MsDb;
}
}