Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用PHP在查询中使用MSSQL_Php_Sql_String_Tsql_Concatenation - Fatal编程技术网

用PHP在查询中使用MSSQL

用PHP在查询中使用MSSQL,php,sql,string,tsql,concatenation,Php,Sql,String,Tsql,Concatenation,首先让我解释一下我想做什么,然后是如何做的,然后是问题所在。 我正在尝试创建一个mssql查询来从数据库中读取发票。每张发票本质上是由发票ID分组在一起的单个费用的汇编。问题是不同的费用可能来自不同的容器(费用与容器相关)。我需要做的是根据发票ID对费用进行分组,并将发票中所有费用的容器名称连接起来,使用一些分隔符,如“|”。 我已经创建了一个临时表@t,其中包含生成发票所需的所有费用和容器名称。在网上搜索了很长一段时间后,我找到了STUFF命令,它似乎可以做我想做的事情(出现,然后做)。下面是

首先让我解释一下我想做什么,然后是如何做的,然后是问题所在。 我正在尝试创建一个mssql查询来从数据库中读取发票。每张发票本质上是由发票ID分组在一起的单个费用的汇编。问题是不同的费用可能来自不同的容器(费用与容器相关)。我需要做的是根据发票ID对费用进行分组,并将发票中所有费用的容器名称连接起来,使用一些分隔符,如“|”。 我已经创建了一个临时表@t,其中包含生成发票所需的所有费用和容器名称。在网上搜索了很长一段时间后,我找到了STUFF命令,它似乎可以做我想做的事情(出现,然后做)。下面是我查询的SQL:

select invoice_id, [Total Paid] RefNumCount,PayCount, MIN([rowNumber]) as rowNumber,     Vendor, Due, [Invoice Number], Company, MAX(Location) as Location,
 SUM([Funded Amount]) as [Funded Amount], 
 [Company ID], [Invoice ID], provider_reference_number, reconcile_date, all_providers
, STUFF(
        (
        select '|' + t1.[Container Name]
        from @t t1
        where t1.[Invoice Number] = t.[Invoice Number]
        order by t1.[Container Name]
        for XML PATH(''), TYPE
        ).value('.', 'nvarchar(100)')
        ,1,1,''
     ) as [Container Name] 

from @t t
group by invoice_id, [Total Paid], RefNumCount, PayCount, Vendor, Due, [Invoice Number], Company, 
    [Company ID], [Invoice ID], provider_reference_number, reconcile_date, all_providers
当我运行这是SQLServerManagementStudio 2008时,它运行得很好。但是,当我在PHP应用程序中使用此代码时,查询不起作用,最终我通过尝试读取一个空结果集而得到一个致命错误。 有人知道为什么会发生这个问题吗?或者是否有其他方法连接字符串

下面是用于调用查询的PHP代码段

           try{
                $q = cms_database::instance();
                 $result = $q->query($sql_statement);        
                 if (!$result) {
                       throw new Exception("Database Error [{$q->errno}] {$q->error}");
                  } 

                $invoices = array();
                while($row=$result->fetch_assoc()) {
                    $invoiceX = array();
                    $invoiceX["rowNum"]     = $row["rowNumber"];
                    $invoiceX["Vendor"]     = $row["Vendor"];
                    $invoiceX["Due"]        = $row["Due"];
                    $invoiceX["Acct"]       = $row["Container Name"];//$row["Account Number"];
                    $invoiceX["container_id"]=$row["container_id"];
                    $invoiceX["provider_id"] =$row["provider_id"];
                    $invoiceX["Invoice"]    = $row["Invoice Number"];
                    $invoiceX["Location"]   = $row["Company"];
                    $invoiceX["FundedAmt"]  = $row["Funded Amount"];
                    $invoiceX["InvoiceID"]  = $row["Invoice ID"];
                    $invoiceX["Notes"]      = $row["Notes"];
                    //merge the notes with notes from payment history that matches the invoiceid


                    $invoices[] = $invoiceX;
                }

                //filter out invoices with all reference numbers accounted for and remaining to be paid is $0.00



                $returnPackage["data"] = $invoices;
                //print $result;
            } catch (Exception $e){
                $returnPackage["success"]=0;
                $returnPackage["message"]=$e.message;

            }
我得到的错误是: “
致命错误:对D:[路径到文件].php第116行的非对象调用成员函数fetch\u assoc()

第116行是代码行

while($row=$result->fetch_assoc()) {

虽然这可能有点晚,但请尝试此SQL调用

select invoice_id, [Total Paid] RefNumCount,PayCount, MIN([rowNumber]) as rowNumber, 
       Vendor, Due, [Invoice Number], Company, MAX(Location) as Location,
       SUM([Funded Amount]) as [Funded Amount], [Company ID], [Invoice ID],
       provider_reference_number, reconcile_date, all_providers , 
       STUFF((select '|' + t1.[Container Name]
              from @t t1
              where t1.[Invoice Number] = t.[Invoice Number]
              order by t1.[Container Name]
              for XML PATH('')),1,1,'') as [Container Name] 
from @t t
group by invoice_id, [Total Paid], RefNumCount, PayCount, Vendor, Due, [Invoice Number], 
         Company, [Company ID], [Invoice ID], provider_reference_number, reconcile_date, 
         all_providers
在下面的select语句中添加“|”时出错,该语句将删除xml标记,在使用.value()尝试提取数据时导致错误

STUFF((select '|' + ... from ... for XML PATH(''), TYPE).value('.', 'nvarchar(100)'),1,1,'')

请显示用于执行查询的PHP代码,以及您得到的确切错误消息。我尝试过其他方法,但它仍然使用for xml路径。那会不会把它扔了?老兄,这帖子太旧了!自从我发布这篇文章后,我甚至换了工作,所以我不知道这是否有效。不过,我会将此标记为答案,因为它似乎是正确的。谢谢你的时间!