PHP PDO MS SQL Server SELECT LIMIT

问题描述 投票:1回答:1

我正在使用PHP PDO将我的项目从MySQL转换为MS SQL,下面的代码允许线程思想记录(左和右),如果记录让我们说#1,那么它应该保持在#1相同的最后记录。我得到错误信息。

注意。Trying to access array offset on value of type bool in C:\inetpub\wwwroot\dxbase\DB_Project\private\supplierschoice.php on line 96

96号线是哪里。

<?php echo "<input type='text' id='CSupplierCode' value='" . $row['SupplierCode'] . "'>"; ?>

我也有 $row = $result->fetch(); 在这之前。

在 "LEFT "按钮上运行的代码。

<?php
$sql = "SELECT s.SupplierID, ..., l.StreetAddress, ... FROM Suppliers s LEFT JOIN Locations l ON s.SupplierID = l.RefID WHERE l.LocGroup = 1 AND s.SupplierID < '" . $tID . "' ORDER BY s.SupplierID DESC LIMIT 1";
$result = $conn->prepare($sql);
$result->execute();
if (!$result) {
   $sql = "SELECT s.SupplierID, ..., l.StreetAddress, ... FROM Suppliers s LEFT JOIN Locations l ON s.SupplierID = l.RefID WHERE l.LocGroup = 1 AND s.SupplierID = '" . $tID . "'";
   $result = $conn->query($sql);
   if (!$result) { echo "Error creating a record: " . $sql . "<br>" . $conn -> errorInfo();}
}
?>

代码没有进入第二部分 (!$result),所以它给出了一个警告和空输入。

UPDATE:尝试使用SELECT TOP 1?

$sql = "SELECT TOP 1 s.SupplierID, s.SupplierCompany, s.SupplierCode, s.Currency, s.PaymentTerm, s.ShippingTerm, s.TMode, s.Agent, s.Carrier, s.Warehouse, l.StreetAddress, l.Suite, l.City, l.Locality, l.State, l.PostalCode, l.Country FROM Suppliers s LEFT JOIN Locations l ON s.SupplierID = l.RefID WHERE l.LocGroup = 1 AND s.SupplierID < '" . $tID . "' ORDER BY s.SupplierID DESC";
    $result = $conn->query($sql);
    if (!$result) {
        $sql = "SELECT s.SupplierID, s.SupplierCompany, s.SupplierCode, s.Currency, s.PaymentTerm, s.ShippingTerm, s.TMode, s.Agent, s.Carrier, s.Warehouse, l.StreetAddress, l.Suite, l.City, l.Locality, l.State, l.PostalCode, l.Country FROM Suppliers s LEFT JOIN Locations l ON s.SupplierID = l.RefID WHERE l.LocGroup = 1 AND s.SupplierID = '" . $tID . "'";
        $result = $conn->query($sql);
        if (!$result) { echo "Error creating a record: " . $sql . "<br>" . $conn -> errorInfo();}
    }

在ID小于#1之后,它仍然没有进入第二部分,而且似乎(!$result)在这里不起作用。

php sql-server pdo
1个回答
0
投票

好吧!我想,这就是我的想法。经过100次的试验和错误,我得到了下面的代码正常工作,在MS SQL Server中左右移动。

} elseif ($tID > 0 && $Order == 3) {
    $sql = "SELECT TOP 1 s.SupplierID, s.SupplierCompany, s.SupplierCode, s.Currency, s.PaymentTerm, s.ShippingTerm, s.TMode, s.Agent, s.Carrier, s.Warehouse, l.StreetAddress, l.Suite, l.City, l.Locality, l.State, l.PostalCode, l.Country FROM Suppliers s LEFT JOIN Locations l ON s.SupplierID = l.RefID WHERE l.LocGroup = 1 AND s.SupplierID < '" . $tID . "' ORDER BY s.SupplierID DESC";
    $result = $conn->query($sql);
    $row = $result->fetch(PDO::FETCH_ASSOC);
    if (!$row) {
        $sql = "SELECT s.SupplierID, s.SupplierCompany, s.SupplierCode, s.Currency, s.PaymentTerm, s.ShippingTerm, s.TMode, s.Agent, s.Carrier, s.Warehouse, l.StreetAddress, l.Suite, l.City, l.Locality, l.State, l.PostalCode, l.Country FROM Suppliers s LEFT JOIN Locations l ON s.SupplierID = l.RefID WHERE l.LocGroup = 1 AND s.SupplierID = '" . $tID . "'";
        $result = $conn->query($sql);
        $row = $result->fetch(PDO::FETCH_ASSOC);
    }
} elseif ($tID > 0 && $Order == 7) {
    $sql = "SELECT TOP 1 s.SupplierID, s.SupplierCompany, s.SupplierCode, s.Currency, s.PaymentTerm, s.ShippingTerm, s.TMode, s.Agent, s.Carrier, s.Warehouse, l.StreetAddress, l.Suite, l.City, l.Locality, l.State, l.PostalCode, l.Country FROM Suppliers s LEFT JOIN Locations l ON s.SupplierID = l.RefID WHERE l.LocGroup = 1 AND s.SupplierID > '" . $tID . "' ORDER BY s.SupplierID ASC";
    $result = $conn->query($sql);
    $row = $result->fetch(PDO::FETCH_ASSOC);
    if (!$row) {
        $sql = "SELECT s.SupplierID, s.SupplierCompany, s.SupplierCode, s.Currency, s.PaymentTerm, s.ShippingTerm, s.TMode, s.Agent, s.Carrier, s.Warehouse, l.StreetAddress, l.Suite, l.City, l.Locality, l.State, l.PostalCode, l.Country FROM Suppliers s LEFT JOIN Locations l ON s.SupplierID = l.RefID WHERE l.LocGroup = 1 AND s.SupplierID = '" . $tID . "'";
        $result = $conn->query($sql);
        $row = $result->fetch(PDO::FETCH_ASSOC);
    }
© www.soinside.com 2019 - 2024. All rights reserved.