2012-02-18 42 views
1

如果沒有$ sql_result的結果,則會拋出錯誤... 如果沒有行,請執行此操作以防止出現錯誤,正確的方法是什麼?不能是你必須先計算行數?

mysql_result($sql_result, 0); 

親切問候任何反應..Ĵ

+1

最簡單的方法來停止'mysql_result'拋出一個錯誤是*停止使用它*。這是古老的,勉強維持了。 – cHao 2012-02-18 22:44:17

回答

0
if (is_resource($sql_result)) { 
    $value = mysql_result($sql_result, 0); 
} 
0

您必須測試$sql_result第一。

0
if ($sql_result !== false    # query was successful 
&& mysql_num_rows($sql_result) > 0) # query returned rows 
{ 
    // do your thing 
} 
0

這是方法,我喜歡:

$sql = "SELECT * ...."; 
$r = mysql_query($sql); 
if (!$r) throw new Exception('Error: ' . mysql_error() . '; Attempted: ' . $sql); 
if (mysql_num_rows($r) > 0) { 
    //Process Result 
} else { 
    //Deal with an empty Result Set 
} 

我拋出一個異常,因爲在我至少應用,一個失敗的SQL查詢是一個大忌MySQL查詢失敗:繼續正常的腳本執行不會完成任何有用的工作〜[SQL語法或數據庫連接問題存在錯誤]。異常冒出來,直到應用程序有適當的地方來捕捉這樣的問題。

我使用特定於應用程序的例外:ExceptionMySQL,以便我可以在應用程序中更高級地捕獲它:例如

//Top Level Application 
try { 
    //Execute appropriate application call 
} catch (ExceptionMySQL $e) { 
    //Deal with a mysql exception 
} catch (ExceptionPermission $e) { 
    //Deal with a permission Exception 
} catch (//etc. etc. etc. 
+0

不是一個壞主意,儘管你一定會選擇一個比'Exception'更具體的類型來拋出...... :)如果你還沒有使用異常,請注意這將導致你的腳本死亡,如果查詢不成功。通常在這種情況下這是正確的,但仍然需要注意。 – cHao 2012-02-19 01:52:02

+0

@cHao是的,我打算使用我實際使用的異常,但是我擔心它讓我的回答不太清楚=) – Shad 2012-02-19 02:23:33

+0

這種方法似乎爲單個查詢添加了更多的工作和邏輯,清潔。如果查詢不好,PHP會拋出錯誤,但如果沒有行,則不會拋出錯誤。如果查詢是好的,結果集是空的,並且你正好行事,就好像有一行一樣,但是PHP的標準過程1)檢查是否(is_resource($ result))然後2) ($ row = mysql_query($ result))允許你容納空的結果集,而不需要繁瑣的異常,而且在/ then/else中很簡單。爲什麼複雜的事情? – hexparrot 2012-02-19 02:37:20