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 Driver はその 1 つです。

代わりに、最初に実行するかSELECT COUNT(*) AS n FROM CiscoROS WHERE ...、最初に行をループしてカウントし、次にそれらを再度ループして出力することができます。

また、こちらもご了承ください...

SQL ステートメント$nameから直接取得して詰め込んでいます。これにより、 SQL インジェクション攻撃$_GETに対して脆弱になります。パラメータ化されたクエリの使用を検討する必要があります。(チェックアウトしてください。)odbc_prepare()odbc_execute()

于 2013-05-10T16:52:34.443 に答える