【发布时间】:2020-05-06 16:06:35
【问题描述】:
我正在使用 PHP PDO 将我的项目从基于 MySQL 的 MS SQL 转换为 MS SQL,下面的代码允许线程思想记录(左和右)如果记录可以说 #1 那么它应该保持在 #1 与最后一个相同记录。我得到错误:
注意:试图访问 bool 类型值的数组偏移量 C:\inetpub\wwwroot\dxbase\DB_Project\private\supplierschoice.php 上 第 96 行
第 96 行是:
<?php echo "<input type='text' id='CSupplierCode' value='" . $row['SupplierCode'] . "'>"; ?>
在那之前我也有$row = $result->fetch();。
在“左”按钮上运行的代码:
<?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),因此它会给出警告和空输入。
更新: 尝试使用 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) 在这里不起作用..
【问题讨论】:
-
SQL Server 没有
LIMIT关键字,所以你的说法是错误的。 -
顺便说一句,您仍然对 SQL 注入持开放态度。没有占位符的准备/执行并不能使它成为真正的准备好的语句。
-
感谢 Funk 四十九的建议,稍后会跟进,只需要确保我所拥有的工作正常
-
@MaxCB 使用
SELECT TOP (1) ...而不是LIMIT 1。 -
这里的 $result 似乎总是 TRUE,即使小于 #1 的 ID 不存在
标签: php sql-server pdo