我希望有人可以帮助我,我已经为此奋斗了3天了。
这是我的情况,我正在建立一个带有php的网站,我有两台计算机作为wampserver的服务器......
主服务器是192.168.0.10
辅助服务器是192.168.0.12
和虚拟机,如果远程连接工作,我试用
我的网站托管在我的主服务器上,因此conexion查询是......
$conexion = mysqli_connect("localhost","root","","dbdaq");
它工作正常,我甚至掌握了在服务器上掌握复制的功能。
但我需要做的是,当主服务器关闭时,它需要尝试连接到seondary数据库上的数据库,所以即时尝试使用代码......
$conexion = mysqli_connect("localhost","root","","dbdaq");
if (!$conexion){
$conexion = mysqli_connect("192.168.0.12","root","password","dbdaq");
}
但是当我手动打开主服务器上的mysql服务时,它实际上并没有尝试使用其他服务器数据库......
它不断给我一个错误
警告:mysqli_connect():( HY000 / 2002):无法建立连接,因为目标计算机主动拒绝它。在第2行的C:\ wamp64 \ www \ PaginaV2 \ Pagina \ PHP和JS \ Procesoalumno.php
答案 0 :(得分:1)
试试这个:使用php的@
运算符(error control operator)来抑制第一次连接失败时的错误消息。试试这个。
$conexion = @mysqli_connect("localhost","root","","dbdaq");
if ( !$conexion ) {
$conexion = mysqli_connect("192.168.0.12","root","password","dbdaq");
}
似乎您的故障转移连接代码可以正常工作,但您仍然会收到令人讨厌的错误消息。 @
运算符会抑制该消息。
答案 1 :(得分:1)
使用@
禁止显示错误消息是一个坏主意,也是一个坏习惯。更好的解决方案是将mysqli设置为在失败时引发异常并捕获异常。
您可以通过在连接之前添加以下行来设置mysqli引发异常。
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
通过使用异常来抑制错误,如果需要特定的处理或日志记录,则可以提取相关的错误消息和错误代码,其方式比抑制错误要干净得多。
尽管它看起来可能更复杂,但原因是我们还测试了第二个连接(无论您如何进行连接,无论如何,您都应该这样做)-然后我们测试第二个连接连接,方法与测试第一个连接相同,即在第一个try/catch
块中添加第二个catch
。
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); // errors in MySQLi now throws exceptions
try {
$conexion = mysqli_connect("localhost","root","","dbdaq");
} catch (Exception $e) {
try {
$conexion = mysqli_connect("192.168.0.12","root","password","dbdaq");
} catch (Exception $e) {
echo "Connecting to both databases failed";
exit;
}
}