2017-05-09 109 views
0

我的代碼資源(3)...odbc_exec()返回假的情況PHP訪問的類型(ODBC結果)

<?php 

$parm1 = 8; 

//Connect to our MS Access database 
$conn=odbc_connect("archive","" ,"password"); 

//Create our SQL statement 
$sql = "SELECT * FROM archive where archiveID = $parm1" . " order by fullname desc"; 

//Execute our SQL statement 
$row=odbc_exec($conn, $sql); 

var_dump($row); 

echo "<option value=''>Select Local Archive Location</option>"; 

    if ($row !== False) { //if there are records, process them. 


      while(odbc_fetch_row($row)){ //Iterate through all our records. 

       echo "<option value='" .trim(odbc_result($row,"archivelocation"))."'>".trim(odbc_result($row,"fullname")).' - '.trim(odbc_result($row,"archivelocation")).' - '.trim(odbc_result($row,"archivedescription"))."</option>"; 
      } 
    }else{ 
       echo "<option value=''>No data returned for the specified search criteria</option>"; 
    } 


odbc_close($conn); //Close our database connection. 


?> 

當上面的代碼運行,且要返回$的值數據行是類型(odbc結果)的資源(3)。我的理解是正確的。但是,當預計$行爲False值時,我仍然會在False情況下獲得類型(odbc結果)的相同值資源(3)。

有人可以解釋爲什麼這是?

+0

您是否進入'else',所以帶有指定文本的選項被回顯? –

+0

否它似乎並沒有進入else語句 –

回答

1

從PHP手冊:

是否成功執行的SQL命令,或FALSE出錯返回一個ODBC結果標識符。

所以,你總是會得到一個ODBC結果標識符,除非有一個實際的錯誤。即使你有一個空的結果集,$行仍然不會等於false。如果你想檢查是否有任何結果,你應該這樣做:

if ($row !== false && odbc_num_rows($row) > 0) { //if there are records, process them. 

    while(odbc_fetch_row($row)){ //Iterate through all our records. 

    echo "<option value='" .trim(odbc_result($row,"archivelocation"))."'>".trim(odbc_result($row,"fullname")).' - '.trim(odbc_result($row,"archivelocation")).' - '.trim(odbc_result($row,"archivedescription"))."</option>"; 
    } 
}else{ 
    echo "<option value=''>No data returned for the specified search criteria</option>"; 
} 
+0

謝謝托比亞斯我一定會試試這個...... –

+0

在嘗試上述之後,其他方面工作。然而,真正的一面停止工作。 –

+0

我道歉Tobias上面的代碼工作完美。我再次嘗試。謝謝.. –

0

現在與Tobias上面的測試中的測試相反,我意識到這是行不通的。爲了得到正確的答案,我不得不修改代碼。以下答案有效。

<?php 

$parm1 = intval($_GET['q']); 

//Connect to our MS Access database 
$conn=odbc_connect("archive","" ,"password"); 

//Create our SQL statement 
$sql = "SELECT * FROM archive where archiveID = $parm1" . " order by fullname desc"; 

//Execute our SQL statement 
$row=odbc_exec($conn, $sql); 

echo "<option value=''>Select Local Archive Location</option>"; 

    if (odbc_fetch_row($row)) { //Retrieve our first record, if any. 

       do { 

        echo "<option value='" .trim(odbc_result($row,"archivelocation"))."'>".trim(odbc_result($row,"fullname")).' - '.trim(odbc_result($row,"archivelocation")).' - '.trim(odbc_result($row,"archivedescription"))."</option>"; 

       } while (odbc_fetch_row($row)); 
    }else{ 
        echo "<option value=''>No data returned for the specified search criteria</option>"; 
    } 


odbc_close($conn); //Close our database connection. 


?>