【问题标题】:SELECT statement with sqlsrv_query not returning results带有 sqlsrv_query 的 SELECT 语句不返回结果
【发布时间】:2013-07-17 03:50:47
【问题描述】:

我有以下 SELECT 语句在 SQL Server 查询工具上“工作”并返回行。但是,当我在 PHP 上运行它时,它不会返回任何行。我知道连接和设置的工作方式与创建简单查询(例如“SELECT * from ...”)时一样有效。这是我的代码。

$tsql = "SELECT  [d].[Device_Type_Name],
           [a].[Company_ID] AS [Alliance],
           [a].[Device_Address]
           FROM [dbo].[AL_LKP_User_Device] AS [a]
           INNER JOIN [dbo].[AL_LKP_User] AS [b]
           ON [a].[Login_ID] = [b].[Login_ID]
           INNER JOIN [dbo].[AL_LKP_NOTIFICATION_MASTER_LOG] AS [c]
           ON [b].[Login_ID] = [c].[Login_ID]
           INNER JOIN [dbo].[AL_LKP_Device_Type] AS [d]
           ON [a].[Device_Type_ID] = [d].[Device_Type_ID]";

$stmt = sqlsrv_query( $conn, $tsql);
    if( !$stmt )
    {
        die( print_r( sqlsrv_errors(), true));
    }

    $rows = sqlsrv_has_rows($stmt);
     if ($rows === true)
          echo "There are rows. <br />";
       else
      echo "There are no rows. <br />";

当那里实际上有行时,我不断得到没有行。我需要在 SQL 语句中更改什么?

【问题讨论】:

  • sqlsrv_has_rows 可以在没有行或发生错误时返回 false,这可能是这里的情况。您确定连接正常吗?如果您尝试从一个表中进行简单的选择会怎样?
  • 是的,连接正常。如果我做一个简单的“SELECT * FROM [dbo].[AL_LKP_User_Device]”,它可以工作并返回结果。
  • 你应该直接运行你的脚本(比如 sql)。然后,您将看到实际结果。
  • @Thiha - 如何直接运行我的脚本??
  • @Hari S - 假设您使用 mysql phpmyadmin。在您的 sql 视图中运行此脚本,然后您将看到结果,您可以在 sql 视图中轻松添加。我不知道 sqlsrv IDE。无论如何,您也可以使用 windows 命令或 Linux 终端运行。

标签: php sql sql-server


【解决方案1】:

您应该将相同的运算符(===)更改为相等的运算符(==)。 您的 $rows 实际上应该包含值,您可以通过这样做来测试它

print_r($rows) 

vardump($rows)

我对此进行了测试:

$rows = array(1=>"a",2=>"b");
if ($rows === true)
echo "There are rows. <br />";
else
echo "There are no rows. <br />";

这确实返回“没有行”,但如果您将“===”更改为“==”,您应该得到“有行”的答案。

1 == 1 为真 1 === '1' 不成立(左边的val是一个整数,另一个是字符串) 1 == '1' 为真(忽略变量类型)

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-08
    • 2012-05-09
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    相关资源
    最近更新 更多