【问题标题】:PHP Returning Multiple RowsPHP返回多行
【发布时间】:2017-11-29 10:30:03
【问题描述】:

当我在屏幕上回显我的查询并直接在 SSMS 中运行时,我会返回一行,这正是我所追求的。当我在我的 php 中运行此查询时,我会返回多行(似乎每个经销商都有一个)。

我应该在此语法中进行哪些更改,以便我只有 1 行在 php 中的屏幕上显示总计,就像我的 SSMS 中发生的那样? --> 如果我将表的结果复制/粘贴到 Excel 中尝试排序,我所拥有的只是 0 显示在表中,而不是像我直接在 SSMS 中查询时看到的返回的实际数据

    {
$startdate = $_POST['startdate'];
$enddate = $_POST['enddate'];
$Dealer = $_POST['dealer'];

$option = array();
$option['driver'] = 'mssql';
$option['host'] = '192.5.100.23';
$option['user'] = 'username';
$option['password'] = 'passs';
$option['database'] = 'test';
$option['prefix'] = '';
$db = JDatabase::getInstance($option);
$query11 = $db->getquery11(true);
$query11 = "SELECT
MAX(A.Value1) AS Value1,
MAX(A.Value10) AS WorkinIT,
MAX(A.Value11) AS OTG
FROM
(
SELECT
ZT1.Dealer,
SUM(ISNULL(ZT1.[Value1],0)) AS Value1,
0 AS Value10,
0 AS Value11
FROM ROCK AS ZT1
WHERE ZT1.[PUD] >= '$startdate'
AND ZT1.[PUD] <= '$enddate'";
if ($Dealer != 'All') {
$query11 .= " AND ZT1.Dealer = '$Dealer'";
}
$query11 .= " GROUP BY ZT1.Dealer
UNION ALL
SELECT
ZT2.Dealer,
0 As Value1,
0 AS Value10,
0 AS Value11
FROM GALL ZT2
WHERE ZT2.[sellD] >= '$startdate'
AND ZT2.[sellD] <= '$enddate'";
if ($Dealer != 'All') {
$query11 .= " AND ZT2.Dealer = '$Dealer'";
}
$query11 .= " GROUP BY ZT2.Dealer
UNION ALL
SELECT
Dealer = RTRIM(LTRIM(dealer)),
0 As Value1,
SUM(ISNULL(abc,0)) AS Value10,
0 AS Value11
FROM WorkinIT AS C1
GROUP BY dealer
UNION ALL
SELECT
Dealer = RTRIM(LTRIM(dealer)),
0 As Value1,
0 AS Value10,
SUM(ISNULL(prs,0)) AS Value11
FROM eOTG AS C2";
if ($Dealer != 'All') {
$query11 .= " WHERE C2.Dealer = '$Dealer'";
}

$query11 .= " GROUP BY dealer) AS A";
}

echo $query11;
$db->setquery11($query11);
$query11 = $db->loadObjectList();
if ($query11) 
{
?>
<table border="1">
<thead>
<tr>
<th>Value </th>
<th>OTG </th>
<th>WorkinIT </th>
</tr>
</thead>
<?php
foreach ($query11 as $res) 
{
print "<tr>";
print "<td>" . "$" . round($res->Value1) . "</td>";
print "<td>" . "$" . round($res->WorkinIT) . "</td>";
print "<td>" . "$" . round($res->OTG) . "</td>";
print "</tr>";
}
}

编辑
这是上述语法生成的 echo 语句,在 SSMS GUI 中运行良好

SELECT Max(A.value1)  AS Value1, 
       Max(A.value10) AS WorkinIT, 
       Max(A.value11) AS OTG 
FROM   (SELECT ZT1.dealer, 
               Sum(Isnull(ZT1.[value1], 0)) AS Value1, 
               0                            AS Value10, 
               0                            AS Value11 
        FROM   rock AS ZT1 
        WHERE  ZT1.[pud] >= '2017-06-01' 
               AND ZT1.[pud] <= '2017-06-22' 
        GROUP  BY ZT1.dealer 
        UNION ALL 
        SELECT ZT2.dealer, 
               0 AS Value1, 
               0 AS Value10, 
               0 AS Value11 
        FROM   gall ZT2 
        WHERE  ZT2.[selld] >= '2017-06-01' 
               AND ZT2.[selld] <= '2017-06-22' 
        GROUP  BY ZT2.dealer 
        UNION ALL 
        SELECT dealer = Rtrim(Ltrim(dealer)), 
               0                   AS Value1, 
               Sum(Isnull(abc, 0)) AS Value10, 
               0                   AS Value11 
        FROM   workinit AS C1 
        GROUP  BY dealer 
        UNION ALL 
        SELECT dealer = Rtrim(Ltrim(dealer)), 
               0                   AS Value1, 
               0                   AS Value10, 
               Sum(Isnull(prs, 0)) AS Value11 
        FROM   eotg AS C2 
        GROUP  BY dealer) AS A 

编辑 2
下图显示了顶部的 SSMS 输出,底部的图像是我的 php 输出

【问题讨论】:

  • 向您的脚本添加一些错误报告,您可能会在代码中被告知 MISSING "。或者使用一个像样的代码编辑器和代码着色也会给你一个提示
  • 这样的查询变量的字符串连接将使您容易受到 SQL 注入攻击。使用准备好的语句和参数会更明智。
  • $query11 .= " GROUP BY ZT2.Dealer 之后缺少引号 ~ 应该是 $query11 .= " GROUP BY ZT2.Dealer ";,我不禁觉得具有嵌套选择的初始选择查询缺少右大括号
  • Smiffy,如果你不给我们看真实的代码,你不会得到有用的答案
  • @RiggsFolly - 复制/粘贴错误。在转到 php 之前,我在 Netbeans IDE 中检查了语法。

标签: php html joomla html-table joomla3.0


【解决方案1】:

$db->loadObjectList() 是返回行列表的 Joomla 函数。 如果你只想要一行,你应该使用 $db->loadObject() 代替

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-14
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多