将 PHP mssql 更改为 sqlsrv (mssql_fetch_row)

Change PHP mssql to sqlsrv (mssql_fetch_row)

我有这个代码:

$query="Select SUBJECT,NOTES from CAMPNOTIFICATION
    where TYPE LIKE 'message_blackboard' AND VALIDAFTER <= GETDATE() AND (VALIDUNTIL >= GETDATE() OR VALIDUNTIL IS NULL)";

    $encode = array();

    //$query = strtr($query, array('{$raum}' => $raum));
    $query_result = mssql_query($query);

    while ($row = mssql_fetch_row($query_result))
     {
       $encode[] = $row;
       $text = $row[1];
       $text = str_replace("<br />","\n",$text);
                $text = str_replace("<br>","\n",$text);
                $text = str_replace("<br/>","\n",$text);
       $text = str_replace("<p>","\n",$text);
       $text = str_replace("\r","",$text);
                $text = strip_tags($text);
       $text = str_replace("\n","<br>",$text);
       $text = str_replace("<br>\r<br>","",$text);
       $text = str_replace("<br><br>","<br>",$text);

       echo "<h2>" . $row[0] . "</h2>" . $text . "<br>";
            }

我必须更改与 sqlsrv 模型的连接。我设法这样做了:

$query="Select SUBJECT,NOTES from CAMPNOTIFICATION
    where TYPE LIKE 'message_blackboard' AND VALIDAFTER <= GETDATE() AND (VALIDUNTIL >= GETDATE() OR VALIDUNTIL IS NULL)";


    //$params = array(SQLSRV_PHPTYPE_*);

    $encode = array();

  $query_result = sqlsrv_query($connection, $query);
    if ($query_result === false){
      die(print_r( sqlsrv_errors(), true));
    }



    while ($row = sqlsrv_fetch_object($query_result))
     {

         //echo "Contenido de Row ". $row -> NOTES;
       $encode[] = $row;
       $text = $row -> NOTES;
       $text = str_replace("<br />","\n",$text);
                $text = str_replace("<br>","\n",$text);
                $text = str_replace("<br/>","\n",$text);
       $text = str_replace("<p>","\n",$text);
       $text = str_replace("\r","",$text);
                $text = strip_tags($text);
       $text = str_replace("\n","<br>",$text);
       $text = str_replace("<br>\r<br>","",$text);
       $text = str_replace("<br><br>","<br>",$text);


       echo "<h2>" . $row -> SUBJECT . "</h2>" . $text . "<br>";
      }

但我需要保留我使用数组位置而不是调用对象的结构。

有人知道吗?非常感谢。

解法:

函数 mssql_fetch_row() 是 MSSQL PHP 扩展(mssql_ 函数)的一部分,并获取一行数据作为数字数组。如果您想使用 PHP Driver for SQL Server (sqlsrv_ functions) 以类似的方式获取数据,您应该使用 sqlsrv_fetch_array()SQLSRV_FETCH_NUMERIC 作为第二个参数值。

您的代码应如下所示:

<?php

....  
while ($row = sqlsrv_fetch_array($query_result, SQLSRV_FETCH_NUMERIC)) {
   $encode[] = $row;
   // Additional code here ...
}
...

?>

补充说明:

如果SELECT语句returns有多个结果集,需要用sqlsrv_next_result()激活指定语句的下一个结果

示例,使用 MSSQL 扩展名:

<?php
// Connection
$server   = "server\instance";
$database = "database";
$username = "username";
$password = "password";
$conn = mssql_connect($server, $username, $password);
mssql_select_db($database, $conn);

// Statement
$sql = "
   SELECT [name], [age] FROM [dbo].[persons];
   SELECT [name], [salary] FROM [dbo].[jobs];
";
$stmt = mssql_query($sql, $conn);

// Fetch data
do {
   while ($row = mssql_fetch_row($stmt)) {
      echo print_r($row, true);
   }
} while (mssql_next_result($stmt));

// End
mssql_free_result($stmt);
mssql_close($conn);
?> 

示例,使用 SQLSRV 扩展名:

<?php
// Connection
$server   = "server\instance";
$database = "database";
$username = "username";
$password = "password";
$info = array(
   "Database" => $database,
   "UID" => $username,
   "PWD" => $password
);
$conn = sqlsrv_connect($server, $info);

// Statement
$sql = "
   SELECT [name], [age] FROM [dbo].[persons];
   SELECT [name], [salary] FROM [dbo].[jobs];
";
$stmt = sqlsrv_query($conn, $sql);

// Fetch data
do {
   while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
      echo print_r($row, true);
   }
} while (sqlsrv_next_result($stmt));

// End
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
?> 

函数等价:

下面的 table 显示了有关每个扩展的函数之间等价性的更多信息:

--------------------------------------------------------------------------------------
MSSQL PHP extension                     PHP Driver for SQL Server                      
--------------------------------------------------------------------------------------
mssql_fetch_assoc($stmt)                sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)
mssql_fetch_row($stmt)                  sqlsrv_fetch_array($stmt, SQLSRV_FETCH_NUMERIC)
mssql_fetch_array($stmt, MSSQL_ASSOC)   sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)
mssql_fetch_array($stmt, MSSQL_NUM)     sqlsrv_fetch_array($stmt, SQLSRV_FETCH_NUMERIC)
mssql_fetch_array($stmt, MSSQL_BOTH)    sqlsrv_fetch_array($stmt, SQLSRV_FETCH_BOTH)
mssql_next_result($stmt)                sqlsrv_next_result($stmt)