Php 如何使用多个服务器名称修复连接字符串无效

Php 如何使用多个服务器名称修复连接字符串无效,php,mysql,sql-server,Php,Mysql,Sql Server,我在实现多个服务器名称时遇到问题,他们告诉我将服务器名称放入阵列中,因此我对其进行了训练,并使阵列看起来像这样$serverNames=[“xx.xx.xx.xxx\\sqlexpress”,“xx.xx.xx.xxx\\sqlexpress”]然后我把它放在内爆上$List=内爆(“,”,$serverName)但是,排列服务器名的操作不起作用。这给了我错误 数组([0]=>Array([0]=>08001[SQLSTATE]=>08001[1]=>87[代码]=>87[2]=>SQL Ser

我在实现多个服务器名称时遇到问题,他们告诉我将服务器名称放入阵列中,因此我对其进行了训练,并使阵列看起来像这样<代码>$serverNames=[“xx.xx.xx.xxx\\sqlexpress”,“xx.xx.xx.xxx\\sqlexpress”]然后我把它放在内爆上<代码>$List=内爆(“,”,$serverName)但是,排列服务器名的操作不起作用。这给了我错误

数组([0]=>Array([0]=>08001[SQLSTATE]=>08001[1]=>87[代码]=>87[2]=>SQL Server的[Microsoft][ODBC驱动程序17]SQL Server网络接口:连接字符串无效[87]。[message]=>SQL Server的[Microsoft][ODBC驱动程序17]SQL Server网络接口:连接字符串无效[87]。[1]=>Array([0]=>HYT00[SQLSTATE]=>HYT00[1]=>0[2]=>0[Microsoft][ODBC驱动程序17用于SQL Server]登录超时已过期[message]=>[Microsoft][ODBC驱动程序17用于SQL Server]登录超时已过期[2]=>Array([0]=>08001[SQLSTATE]=>08001[1]=>87[code]=>87[2]=>Microsoft][ODBC驱动程序17用于SQL Server]建立与SQL Server的连接时发生与网络相关或特定于实例的错误。找不到服务器或无法访问服务器。请检查实例名称是否正确,以及SQL Server是否配置为允许远程连接。有关详细信息,请参阅SQL Server联机丛书。[消息]=>[Microsoft][ODBC驱动程序17 For SQL Server]建立与SQL Server的连接时发生与网络相关或特定于实例的错误。找不到服务器或无法访问服务器。请检查实例名称是否正确,以及SQL Server是否配置为允许远程连接。有关详细信息,请参阅SQL Server联机丛书。)

要查看更多我已经创建的代码,我将向您展示我的示例

<?php 



        $serverNames = ["xx.xx.xx.xxx\\sqlexpress", "xx.xx.xx.xxx\\sqlexpress"];//serverName\instanceName

        foreach($serverNames as $ip) {

            $ip_array = $ip;

            $connectionInfo = array( "Database"=>"users", "UID"=>"sa", "PWD"=>"1234");
            $conn = sqlsrv_connect( $ip_array, $connectionInfo);

            if( $conn ) {       
            }else{
                 echo "Connection could not be established.<br />";
                 die( print_r( sqlsrv_errors(), true));
            }
        }

        $tsql = "SELECT * FROM users";
        $stmt = sqlsrv_query($conn,$tsql);

        while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {

                    echo '<tr>';
                        echo '<td style="font-size:11px;">'.$row['Firstname'].'</td>';
                        echo '<td style="font-size:11px;">'.$row['LastName'].'</td>';
                        echo '<td style="font-size:11px;">'.$row['DateBirth'].'</td>';
                    echo '</tr>';


        }


    ?>          

连接到每个服务器,从该服务器中提取数据行,或者在该服务器不可用时打印错误消息行

<?php
$serverNames = ['xx.xx.xx.xxx\\sqlexpress', 'xx.xx.xx.xxx\\sqlexpress'];
$connectionInfo = array('Database'=>'users', 'UID'=>'sa', 'PWD'=>'1234');

foreach ($serverNames as $ip) {
  $conn = sqlsrv_connect($ip, $connectionInfo);

  if (empty($conn)) {

    //  data of one server is not extracting to the table
    echo '<tr><td colspan="3">Connection to <strong>Server ';
    echo $ip;
    echo '</strong> could not be established.</td></tr>';
  } else {

    $tsql = 'SELECT * FROM users';
    $stmt = sqlsrv_query($conn, $tsql);

    while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {

      echo '<tr>';
      echo '<td style="font-size:11px;">'.$row['Firstname'].'</td>';
      echo '<td style="font-size:11px;">'.$row['LastName'].'</td>';
      echo '<td style="font-size:11px;">'.$row['DateBirth'].'</td>';
      echo '</tr>';
    }
  }
}

change
die(print_r(sqlsrv_errors(),true))
to
echo($ip错误:“.print\r(sqlsrv\u errors(),true)”)
并查看第二个是否连接。@webjujuju当然可以will@SoulAiker,我认为如果使用双引号,您不需要逃避反弹<代码>xx.xx.xx.xxx\sqlexpressᴇᴛᴀʟ我得到的唯一数据是数组的第二个值。第一个ip没有加入。@WEBjuju我得到的唯一数据是数组的第二个值。第一个ip没有加入。断开一个只获得1个ip地址的连接,我想要看到的两个ip地址的数据。如果其中一个无法连接,会发生什么情况?如果是这样,一个服务器的数据不会提取到表中。我更新了代码以从每个服务器提取用户行,我在表中创建一行时出错…您可以根据需要删除该行。