【问题标题】:How to query MS SQL Server using PHP and not list column names?如何使用 PHP 查询 MS SQL Server 而不列出列名?
【发布时间】:2015-10-14 18:58:03
【问题描述】:

我正在使用 PHP 查询 Microsoft SQL Server 并返回结果集。我的问题是 PHP 代码返回了我想要的结果集,但它只是部分结果集。

对于这个例子,整个表格有 6 列数据

以下是 HTML Snippet 中数据库中表格设计的代码 sn-p:

<!DOCTYPE html>
<html>
<body>

<table border="1" style="width:100%">
  <tr>
    <td>COL1</td>
    <td>COL2</td>		
    <td>COL3</td>
    <td>COL4</td>
    <td>COL5</td>		
    <td>COL6</td>
  </tr>
  <tr>
    <td>rowdata</td>
    <td>rowdata</td>		
    <td>rowdata</td>
<td>rowdata</td>
    <td>rowdata</td>		
    <td>rowdata</td>
  </tr>
  <tr>
    <td>rowdata</td>
    <td>rowdata</td>		
    <td>rowdata</td>
<td>John</td>
    <td>rowdata</td>		
    <td>rowdata</td>
  </tr>
</table>

</body>
</html>

以下是用于查询 SQL Server 的 PHP 脚本:

<?php    

$serverName = "sqlserver";   
$uid = "username";     
$pwd = "password";    
$databaseName = "databasename";   

$connectionInfo = array( "UID"=>$uid,                              
                         "PWD"=>$pwd,                              
                         "Database"=>$databaseName);   


/* Connect using SQL Server Authentication. */    
$conn = sqlsrv_connect( $serverName, $connectionInfo); 

$tsql = "SELECT * FROM TABLE " ;  


/* Execute the query. */    

$stmt = sqlsrv_query( $conn, $tsql);  


if ( $stmt )    
{    
     echo "Statement executed.<br>\n";    
}     
else     
{    
     echo "Error in statement execution.\n";    
     die( print_r( sqlsrv_errors(), true));    
}    


    //Working Query
/* Iterate through the result set printing a row of data upon each iteration. */

  while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)){
 foreach ($row as $column=>$value)


   {
      echo 
       $column.": " .$value."<br />";

   }
   echo '<hr />';

}





/* Free statement and connection resources. */    
sqlsrv_free_stmt( $stmt);    
sqlsrv_close( $conn);    

?>    

这是仅返回 4 列的问题,并且这些 4 列的 1 行数据

PHP 控制台返回的示例:

Statement executed.<br>
COL1: rowdata<br />COL2: rowdata<br />COL3: rowdata<br />COL4: rowdata<br />

如果您还不能确定,我正在尝试显示查询的完整结果集,而不列出 PHP 中的列。

I.E.

echo $row[1];
echo $row[2];
echo $row[3];

等等

----------------------------------- ----更新-------------------------------------- ----------------------

我发现 SQL Server 中的 DATETIME 列存在问题。当我 CAST() 在 PHP 代码中传递 SQL 查询中的列时,它返回了完整的结果集。这是一种解决方法,但是我想保留 DATETIME 格式并只传递查询而不是强制转换它。

想法?

更新代码:

/* Connect using SQL Server Authentication. */    
$conn = sqlsrv_connect( $serverName, $connectionInfo); 

$tsql = "SELECT
COL1,
COL2,
COL3,
CAST(COL4 AS VARCHAR) 'COL4'
COL5,
COL6  
FROM TABLE " ;  

PHP 控制台返回的示例:

  Statement executed.<br>
    COL1: rowdata<br />COL2: rowdata<br />COL3: rowdata<br />COL4: rowdata<br />COL5: rowdata<br />COL6: rowdata<br />
COL1: rowdata<br />COL2: rowdata<br />COL3: rowdata<br />COL4: rowdata<br />COL5: rowdata<br />COL6: rowdata<br />

如您所见,它返回表的整个结果集。

【问题讨论】:

  • 当我回显每一列时,似乎也会限制返回 4 列。我想知道是否可以返回的函数有限制?对于我正在尝试做的事情来说,这似乎很麻烦。我只需要一个 SELECT 语句的完整结果集...

标签: php sql-server html web


【解决方案1】:

您的代码正在尝试将行作为关联数组读取。尝试像现在一样使用 sqlsrv_fetch_assoc 而不是 sqlsrv_fetch_array

//replace the function call in the line below!
while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)){
 foreach ($row as $column=>$value)


   {
      echo 
       $column.": " .$value."<br />";

   }
   echo '<hr />';

}

【讨论】:

  • 我想你不能举个例子,我的好人,不知道我会在哪里添加这个?
  • 更改为 sqlsrv_fetch_assoc($stmt, SQLSRV_FETCH_ASSOC)
  • 啊,我知道我已经尝试过那个特定的更改,它只是从上面的 IF 语句返回“语句执行。
    。没有返回数据:\
  • 更新了对我原始帖子的评论,看来此特定代码存在某种限制。我不认为您有其他方法可以做到这一点?试图显示 SELECT * FROM TABLE 的完整结果集;列名和行可能会将其放入函数中,因为我们正在尝试创建一个类似于 Microsoft Access ADP 文件的 Web 报告页面,其中包含指向 SQL Server 的链接
猜你喜欢
  • 2019-06-28
  • 2019-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-29
  • 2019-03-03
相关资源
最近更新 更多