【问题标题】:Access to MSSQL database table from php webpage从 php 网页访问 MSSQL 数据库表
【发布时间】:2019-04-11 08:25:18
【问题描述】:

我正在尝试创建一个 php 文件来访问我桌面中的 mssql 数据库并在此网页中显示数据。 Web 服务器正在运行 linux。 我可以使用 sql 或 windows 身份验证,通过 SQL managemnet studio 从公共 IP 访问 mssql 数据库,没有问题。但无法在我的页面中显示任何数据。端口已打开,服务器已配置为远程访问。

我的问题是,我是否必须在我的 PC 中安装 php 和 microsoft 驱动程序才能使其工作? 我的电脑运行 Vista 32,我使用 Microsoft SQL Server 2008 作为数据库。 谢谢。

我的代码是...

 <?php

$connectionInfo = array( "UID" => "user", "PWD" => "123456", "Database"  => "TestDB" );
$link = sqlsrv_connect( "111.222.333.444", $connectionInfo );
if( $link ) {
 echo "Connection established.<br />";
} else{
 echo "Connection could not be established.<br />";
 die( print_r( sqlsrv_errors(), true ) );
}
$sql = "SELECT *  FROM table";

$stmt = sqlsrv_query( $link, $sql );
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC ) ) {
echo $row['value']."<br />";
}

if( $stmt === false ) {
die( print_r( sqlsrv_errors(), true));
}
 ?>

【问题讨论】:

    标签: php sql-server sqlsrv


    【解决方案1】:

    如果我正确理解您的问题,答案是

    PHP 和 PHP Driver for SQL Server 应该安装在运行 WEB 服务器的这台机器上。在您的情况下,这是 Linux 机器。如果一切安装和配置正确,您应该能够连接到在 Vista 机器上运行的 SQL Server 实例。当然,您应该能够连接到任何允许远程访问的 SQL Server 实例。

    您需要根据support matrix选择正确的SQL Server PHP Driver版本并按照安装步骤进行操作。

    您的 PHP 代码是正确的,但最好在每次执行 sqlsrv_ 函数后检查错误:

    <?php
    # Connection info
    $connectionInfo = array(
        "UID" => "user", 
        "PWD" => "123456", 
        "Database"  => "TestDB"
    );
    
    # Connection
    $link = sqlsrv_connect("111.222.333.444", $connectionInfo);
    if ($link === false) {
        echo "Connection could not be established.<br />";
        die( print_r( sqlsrv_errors(), true ) );
    } else {
        echo "Connection established.<br />";
    }
    
    # Statement
    $sql = "SELECT * FROM table";
    $stmt = sqlsrv_query($link, $sql);
    if ($stmt === false) {  
        echo "Error executing query.<br />";
        die( print_r( sqlsrv_errors(), true));
    }
    
    # Fetch data
    while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
        echo $row['value']."<br />";
    }
    
    # End
    sqlsrv_free_stmt($stmt);
    sqlsrv_close($link);
    ?>
    

    更新: 使用ODBC 的示例:

    <?php
    $server   = "111.222.333.444";
    $user     = "user";
    $password = "123456";
    $database = "testDB";
    $conn_string = 'Driver={SQL Server Native Client 11.0};Server='.$server.';Database='.$database.';client_charset=UTF-8;';
    if ($conn = odbc_connect($conn_string, $user, $password)) {
        $sql = "SELECT * FROM table";
    
        $result = odbc_exec($conn, $sql);
        while (odbc_fetch_row($result)) {
            $value = odbc_result($result, "value");
            echo $value.'</br>';
        }
    }
    ?>
    

    【讨论】:

    • 亲爱的 Zhorow 感谢您的回复。我在上面尝试了您的代码,但再次没有运气。我的 PHP 版本是 7.0.33,所以安装在 webserver 中的驱动程序如下所示: Server API :CGI/FastCGI , cURL support enabled , ODBC Support enabled , PDO support: enabled, PDO Driver for MySQL: enabled.我想我的配置中缺少一些东西,以便使其工作。谢谢。
    • @Jim 使用此行 &lt;?php phpinfo();?&gt; 执行一个简单的 PHP 文件,并检查输出中的 sqlsrvpdo_sqlsrv 部分。如果它们存在,则您的 SQL Server 的 PHP 驱动程序已启用。 MySQL 与 MSSQL 不同——它是 MySQL 的扩展。谢谢。
    • 我的面板中没有显示 sqlsrv 或 pdo_sqlsrv 部分。意思是不能为MSSQL建立连接?
    • @Jim 是的,您需要为 SQL Server 安装 PHP 驱动程序才能建立连接。我认为这一定是您的首选。另一个选项可能是 ODBC。
    • 您好 Zhorov,感谢您的建议。我尝试使用 ODBC 连接字符串通过 php 访问我的数据库,根据我的网络服务器 phpinfo() 响应,ODBC 支持已启用并且 PDO 支持:已启用但尚未成功。
    【解决方案2】:
    Finally i made it to work with following code...
    
      <?php
     $server   = "192.168.1.111,50052"; // DB SERVER IP AND PORT
    $user     = "XXXXXX";
     $password = "YYYYYY";
    $database = "MYdb";
       $conn = 'Driver={SQL Server Native Client 11.0};Server='.$server.';                   Database='.$database.';client_charset=UTF-8;';
    
     $today = date("Y-m-d"); 
    
     if ($conn = odbc_connect($conn, $user, $password)) {
    $sql = "SELECT * FROM MTRL WHERE MY_TABLE >= '$today'";
    
      $result = odbc_exec($conn, $sql);
     while (odbc_fetch_row($result)) {
    
        $product_id = odbc_result($result, "ID");
        $name = odbc_result($result, "NAME");
        $dateModified = odbc_result($result, "INSERTDATE");
        echo $id . " - " . $product_id. " - " . $name . " - " . $dateModified .     '</br>';
    
       }
    }
    
     ?>
    

    【讨论】:

    • 很高兴您找到了解决问题的方法。您可以在下一个问题和答案中考虑以下内容: 1) 最好只发布一个答案,或者如果您需要添加更多信息,请编辑您现有的答案。 2)如果您认为这个或任何其他答案是您问题的最佳解决方案,您可以接受。谢谢,祝你好运!
    • 亲爱的 Zhorov 再次感谢您和社区的帮助。我会将您的建议牢记在心,以备将来发帖。也祝你好运。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 2016-03-20
    相关资源
    最近更新 更多