2011-08-25 29 views
0
while($rowForStateList = @mysql_fetch_array($resForStateList)) 

{ 
    $sid[$i] = $rowForStateList['state_auto_id']; 

    $sname[$i] = $rowForStateList['state_name']; 

    $spid[$i] = $rowForStateList['country_auto_id']; 

    $i++; 
} 

我不能想出以下兩種語法

while($rowForStateList = mysql_fetch_array($resForStateList)) 

{ 
    $sid[$i] = $rowForStateList['state_auto_id']; 

    $sname[$i] = $rowForStateList['state_name']; 

    $spid[$i] = $rowForStateList['country_auto_id']; 

    $i++; 
} 
+0

「@」符號是區別。有一個問題:這個符號在SO上意味着什麼。 – hakre

+0

[參考 - 這個符號在PHP中意味着什麼?](http://stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php) – hakre

回答

2

不同的是,第一@mysql_fetch_array代碼示例中取出抑制任何錯誤陣列,而mysql_fetch_array做相同的,但不抑制錯誤。其實第二個是更正確的方法。

使用@的邪惡,它comlicates調試了很多。通過這種抑制,如果發生錯誤,您最終會得到空數組,因此它看起來就像查詢用於得到$resForStateList已返回空結果。但是,您實際上可能會破壞查詢,拒絕數據庫連接以及其他任何操作。並與@你永遠不會知道出了什麼問題

所以,不要用@。相反,請使用錯誤handling functions。最好的方法是檢查是否可能導致錯誤,例如mysql_query回報任何錯誤的情況下,假的,所以你可能要檢查它像

$result = nysql_query("qwerty"); 
if (!$result){ 
    echo mysql_error(); 
} 
+0

+1表示說使用@不正確。不過,您可能想添加爲什麼。 – GordonM

+0

那麼,有人會解釋爲什麼這篇文章是downvoted?我錯了嗎? :) – J0HN

+0

@JOHN,你有我。我的意見也被壓低了,我認爲有人對他們的內褲進行了歪曲,認爲@或者暗示@這個操作符並不是一個好主意。 – GordonM

1

的區別是,前者將掩蓋發生在mysql_fetch_array()任何錯誤,使得調試更加困難差異性之探源。

0

區別在於錯誤報告。 如果您在mysql_fetch_array之前設置@,則任何錯誤都將被忽略。 see php errorcontrol

0

,唯一的區別是,在所述第一代碼的mysql_fetch_array前的@將被顯示在屏幕上禁止任何錯誤。

0

他們是相同的。由於抑制運算符@,第一個mysql_fetch_array()不會生成錯誤消息。

0

第一個將默默地忽略任何錯誤。第二個將顯示任何錯誤或異常拋出mysql_fetch_array(例如,連接問題)。神奇來自@標誌。

0

@mysql_fetch_array($resForStateList)) 不會以錯誤的情況下出現的任何消息。 就是這樣。

1

在第一個版本的@基本意思是「如果這功能觸發一個錯誤,只是將其隱藏,不記錄或顯示它」。

永遠不要使用@錯誤抑制操作!它不僅會造成調試噩夢,還會損害應用程序的性能。使用error_reporting,log_errors和display_errors來設置適當的錯誤消息行爲。

+0

有人似乎已經低估了這一點?你能解釋爲什麼嗎? – GordonM

1

不要在這種情況下使用@操作。如果資源無效,mysql_fetch_array將只會引發錯誤。在獲得此資源之後,您應該先檢查一下。

0

當你在表達式前加'@'時,任何可能產生的錯誤信息將被忽略(即不會產生錯誤輸出)。無論如何,如果啓用了track_errors功能,那麼由表達式生成的任何錯誤消息將在變量$ php_errormsg中保存(並在每個錯誤上覆蓋)。

檢查PHP Error Control瞭解更多詳情。

實際上,我更喜歡使用表達式寬度'@'並用一個函數處理所有異常,該函數將文件中的所有消息記錄爲error_log()。例如:

function error_handler($errno, $errstr, $errfile=null, $errline=null, $errcontext=null) { 
    error_log($errstr, 3, 'debug.log'); 
} 

set_error_handler('error_handler', ERROR_REPORTING);