我正在使用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)在这里不起作用。
好吧!我想,这就是我的想法。经过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);
}