【问题标题】:Ignored records rows in PHP to MSSQL connection忽略 PHP 到 MSSQL 连接中的记录行
【发布时间】:2019-07-18 13:11:58
【问题描述】:

当我用这个查询向 mssql 询问数据时,我遇到了不同结果的问题。直接在服务器上执行它给了我 3 个结果,但从 PHP 服务器连接它只给了我一行 = 041SE010-0240 propabli 是编码问题,但我不知道如何解决我尝试更改 PHP 服务器连接的编码。我尝试过CP1250,服务器上的CP1251编码是CP1250并整理Czech_CI_AS。

SELECT S.IDS, S.RefStruct, ISNULL(S.StavZ - S.ObjedP, 0) AS quantity
            FROM SKz S
            WHERE S.IDS IN ('092COž01', '00XXž004', '041SE010-0240')  AND RefStruct IN (2, 3)

我的代码:

$where = '';
    if (!empty($this->allowedWarhouses)) {
        $where = ' AND RefStruct IN (' . implode(', ', $this->allowedWarhouses) . ')';
    }

$resource = $this->pohodaDatabase->query(
    "SELECT S.IDS, S.RefStruct, ISNULL(S.StavZ - S.ObjedP, 0) AS quantity
    FROM SKz S
    WHERE S.IDS IN ('092COž01', '00XXž004', '041SE010-0240')" . $where
);
$productStocksDataWrapper = array();
var_dump($this->pohodaDatabase->rows($resource));  // int(0)
var_dump($this->pohodaDatabase->getLastQuery()); //SELECT S.IDS,S.RefStruct,ISNULL(S.StavZ - S.ObjedP, 0) AS quantity FROM SKz S WHERE S.IDS IN ('092COž01', '00XXž004', '041SE010-0240') //
while ($row = $this->pohodaDatabase->fetch_assoc($resource)) {
    var_dump($row); // only 041SE010-0240
    $productStocksData = new PohodaProductStocksData();
    $productStocksData
        ->setCatnum($row['IDS'])
        ->setPohodaWarhouseExtId($row['RefStruct'])
        ->setQuantity($row['quantity']);
    $productStocksDataWrapper[] = $productStocksData;
}
var_dump($productStocksDataWrapper); // just 041SE010-0240
die();

【问题讨论】:

  • 向我们展示 PHP 代码
  • 您使用什么驱动程序连接到 SQL Server 以及您的表定义是什么?谢谢。
  • 您已经指出手动执行查询时会产生预期的结果,那么您如何确认问题出在查询本身而不是 PHP 代码?您实际上是如何观察问题的?
  • 在您的 PHP 中,您正在连接查询的一部分,$where,我们不知道这是什么。
  • @KubaDolníček 你不是问我们问题的根源在哪里吗?如果您知道问题出在哪里,为什么不在您的问题中这么说呢?您确实需要向我们提供所有信息来诊断您的问题,每次更新都会遗漏一些内容。 $this->allowedWarhouses 的值是多少?如果您的查询没有返回相同的数据,那么它就不是相同的查询。

标签: php sql sql-server


【解决方案1】:

iconv('UTF-8', 'cp1250', QUERY STRING...);

这是一个毫无意义的解决方案。

【讨论】:

    【解决方案2】:
    $resource = $this->pohodaDatabase->query(
                "SELECT S.IDS, S.RefStruct, ISNULL(S.StavZ - S.ObjedP, 0) AS quantity
                FROM SKz S
                WHERE S.IDS IN ('092COž01', '00XXž004', '041SE010-0240')" . $where
            );
    
            $productStocksDataWrapper = array();
            var_dump($this->pohodaDatabase->rows($resource));  // int(0)
            var_dump($this->pohodaDatabase->getLastQuery()); //SELECT S.IDS,S.RefStruct, ISNULL(S.StavZ - S.ObjedP, 0) AS quantity
                FROM SKz S
                WHERE S.IDS IN ('092COž01', '00XXž004', '041SE010-0240') //
            while ($row = $this->pohodaDatabase->fetch_assoc($resource)) {
                var_dump($row); // only 041SE010-0240
                $productStocksData = new PohodaProductStocksData();
                $productStocksData
                    ->setCatnum($row['IDS'])
                    ->setPohodaWarhouseExtId($row['RefStruct'])
                    ->setQuantity($row['quantity']);
    
                $productStocksDataWrapper[] = $productStocksData;
            }
    
            var_dump($productStocksDataWrapper); // just 041SE010-0240
            die();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-11
      • 1970-01-01
      • 2017-05-06
      • 2012-12-12
      • 2014-06-28
      相关资源
      最近更新 更多