【问题标题】:Changing MySQL connection in the event of failure - PHP发生故障时更改 MySQL 连接 - PHP
【发布时间】:2014-05-13 03:15:21
【问题描述】:

我正在做一个项目,我需要测试远程 MySQL 连接,如果它失败,那么我需要代码切换到使用本地 MySQL 连接。我遇到的问题是代码总是显示错误,这真的会扼杀最终用户体验。

我尝试过的事情:

  1. 尝试捕获异常
  2. 用@ 抑制错误
  3. 对着电脑大喊

代码:

//-----Remote MySQL Server-----------
$rem_host="99.99.999.999"; //Host Name 
$rem_user="testUser"; //MySQL Username 
$rem_pass="testPass"; //MySQL Password 
$rem_db="testDb"; //Database Name 


//----Local MySQL Server-----------
$local_host="127.0.0.1"; //Host Name 
$local_user="testLocal"; //MySQL Username 
$local_pass="passLocal"; //MySQL Password 
$local_db="localDb"; //Database Name 


$remoteConnection = mysqli_connect("$rem_host","$rem_user","$rem_pass","$rem_db");

if(!$remoteConnection){ $check_connection=0; }
else{ $check_connection=1; mysqli_close($remoteConnection); }


if($check_connection==1){

$db_host = $rem_host; //Host Name 
$db_user = $rem_user; //MySQL Username 
$db_pass = $rem_pass; //MySQL Password 
$db_name = $rem_db; //Database Name 

}
else{

$db_host = $local_host; //Host Name 
$db_user = $local_user; //MySQL Username 
$db_pass = $local_pass; //MySQL Password 
$db_name = $local_db; //Database Name 

}

?>

【问题讨论】:

  • if($check_connection=1){ 将值1分配$check_connection。使用== 进行相等性测试。
  • 这是一个错字,但不是问题。

标签: php mysql error-handling mysqli connection


【解决方案1】:

根据您的选择更改第 2 行。首先我获取 URL,然后检查它是否有“localhost”字样,然后我按照 localhost 详细信息(我在本地机器中使用 localhost/)。如果 $actual_link 无法获取 localhost 则关注在线详情

<?php
$actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
if (strpos($actual_link,'localhost') !== false) 
{
    //local db detail
    $servername='localhost';     
    $dbusername='root';          
    $dbpassword='';              
    $dbname='db_gbook';
    echo "local";
}
else
{
    //online db detail
    $servername='localhost';     
    $dbusername='dbaname';          
    $dbpassword='dbpassword';              
    $dbname='yourdbname';
    echo "web";
}

global $link;
$link=mysql_connect ("$servername","$dbusername","$dbpassword");
if(!$link)
{
    die("Could not connect to MySQL");
}
mysql_select_db("$dbname",$link) or die ("could not open db".mysql_error());    
echo "Succesive";
?>

【讨论】:

  • 这很棒,但我的 HTTP 主机总是在本地。这些页面一直在本地 apache 服务器上运行。这些页面将在平板电脑上使用,该平板电脑的各个点可能有也可能没有互联网连接。如果互联网连接是实时的,那么我需要使用远程mysql服务器,否则我需要依赖本地mysql服务器,然后在连接恢复时同步表。
  • 当连接生效时,页面的 url 是什么?
  • 无论平板电脑是否有互联网连接,页面的 url 都是 localhost/page.php。实际的本地 apache 服务器驻留在平板电脑本身上。这些页面永远不会从外部服务器上拉下来,只有 mysql 数据会来自外部服务器。
  • 您将成功连接到从 php 到 localhost 的在线服务器?
  • 无论是否有互联网连接,页面始终是本地的。唯一改变的是页面中用户输入的存储位置。如果没有 Internet 连接,则到本地 mysql 数据库;如果有 Internet 连接,则到远程 mysql 数据库。这变得令人费解:)
猜你喜欢
  • 2017-12-07
  • 2019-01-29
  • 1970-01-01
  • 1970-01-01
  • 2014-10-21
  • 2012-09-28
  • 1970-01-01
  • 1970-01-01
  • 2012-03-19
相关资源
最近更新 更多