2013-01-18 154 views
0

我在localhost和远程主机dev之间切换:我在localhost上测试它,然后我将这些文件复制到远程的php。php访问mysql本地主机和远程主机

我有一个类MYDB,它将常量中的主机和用户数据库信息存储起来。 如何声明常量并写入MYDB,以便我不必在这两个访问日期之间手动切换。而是,我想自动切换。 我使用:

host: localhost 
user: timo 
db: localhostdb 
pwd: ... 

host: remotehostname 
user: timo 
db: remotehostdb 
    pwd:.. 

之前,我切换到本地主机,我评论的远程主机,反之亦然。不是很好。 有什么想法? Timo

+1

由于本地主机可以在远程和本地工作,因为对于远程主机通常是本地主机 –

回答

2

关于好。其他一些方法

  1. 一些人维持生产和本地测试之间不同的文件
  2. 你可以绕到了代码,如果($生产)..否则.....然后自动设置生产变量。例如我们根据网址来做。如果该URL是生产URL,那么$生产被设置为生产。
3

我通过将凭证存储在config.live.php文件中来处理此问题,该文件可以用存在的config.test.php文件覆盖。

当包括配置:

require_once(file_exists('config.test.php') ? 'config.test.php' : 'config.live.php'); 

我把版本化config.live.php和SVN忽略config.test.php。这样,测试文件永远不会在生产中结束,任何签出代码副本的人都可以将live.php复制到新的test.php文件并更新其测试配置。

2

我如何解决它:

类MYDB {

private static $db; 

static public function getInstance($Start = false) { 

if ($_SERVER['SERVER_NAME'] == 'localhost') { 

/* $DB_HOST = 'localhost'; 
    $DB_DATABASE = ''; 

    $DB_USER = ''; 
    $DB_PASSWORD = ''; 
*/ 
    $aConnection = array('DB_HOST' => 'localhost', 'DB_DATABASE' => '', 'DB_USER' => '', 'DB_PASSWORD' => ''); 
} else { 

    $aConnection = array('DB_HOST' => 'd', 'DB_DATABASE' => '', 'DB_USER' => '', 'DB_PASSWORD' => $DB_PASSWORD); 

} 

    if (!self::$db) { 
     self::$db = new PDO('mysql:host=' . $aConnection['DB_HOST'] . ';dbname=' . $aConnection['DB_DATABASE'] , $aConnection['DB_USER'], $aConnection['DB_PASSWORD'], array(PDO::ATTR_PERSISTENT => true, 
     PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 
     PDO::ATTR_EMULATE_PREPARES => false, 
     PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC)); 
    } 

    echo mysql_error(); 

    if ($Start) 
     return $aConnection; 
    else #Normale pdo klasse 
     return self::$db; 
} 

}

所以,如果我需要一个正常的MySQL连接,我使用数组,如果我需要PDO,我用的是静态数据库变量。