0

这应该很容易,但我找不到答案。我希望结果的数量出现在页面的顶部。

<?php
$db = realpath('C:\AccessBackEnds\Supplylist\SupplyEnd.accdb');
$conn = odbc_connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=$db",'','') or die
("Unable to connect to server");

$name = $_GET['ServiceLineItem'];

$info1 = "SELECT * FROM CiscoROS WHERE ServiceLineItem ='$name'";
$rs1=odbc_exec($conn,$info1);

echo odbc_num_rows($info1);

while($row = odbc_fetch_array($rs1))    {
echo "<dt>Company:  </dt><strong>" . $row["Company"] . "</strong>";
echo "<dt>Monitoring Status:  </dt><strong>" . $row["MonitoringStatus"] . "</strong>";
echo "<br>*******************************************************************";

}

odbc_close($conn)
?>
4

1 回答 1

0

odbc_num_rows()期望通过odbc_exec()调用返回的资源。您当前正在向它传递一个字符串(恰好是 SQL 语句)。要获得返回的行数,您可以尝试使用...

odbc_num_rows($rs1)

...但并非所有 ODBC 驱动程序都返回 SELECT 语句返回的实际行数。许多驱动程序只返回对 INSERT、UPDATE 和 DELETE 语句影响的实际行,而对 SELECT 语句只返回 -1;Microsoft Access 驱动程序就是其中之一。

因此,您可以先做SELECT COUNT(*) AS n FROM CiscoROS WHERE ...,或者您可以先循环遍历行以计算它们,然后再次循环遍历它们以将它们打印出来。

另外,还请注意...

$name直接从SQL 语句中获取$_GET并将其填充到 SQL 语句中。这使您容易受到SQL 注入攻击。你真的应该考虑使用参数化查询。(检查odbc_prepare()odbc_execute()。)

于 2013-05-10T16:52:34.443 回答