2012-07-09 58 views
0

嗨,我有一個數組,我想將一個變量傳遞給一個函數。如何用數組參數檢查數據庫?

'#\@(.*?)\;#si' => 'some before text' . retrieveName('$1') . 'some after text,' 

function retrieveName($poster_id){ 
    $sanitized_id = sanitizeIn($poster_id); 

    $getname = mysql_query("SELECT * FROM users WHERE userid = '$sanitized_id';") 
       or die(mysql_error()); 
    $namerow = mysql_fetch_array($getname); 
    $exists = mysql_num_rows($getname); 

    if($exists == "0"){ 
     return $sanitized_id; 
    } else { 
     return $namerow['username']; 
    } 
} 

它應該採取的$1值,檢查數據庫與ID的用戶,然後返回自己的用戶名。但是,沒有參數傳遞給retrieveName

回答

1

的retrieveName功能應該是:

function retrieveName($poster_id){ 
    $sanitized_id = sanitizeIn($poster_id); 
    $get_name = mysql_query("SELECT * FROM users WHERE userid = '$sanitized_id';") or die(mysql_error()); 
    $name_row = mysql_fetch_array($get_name); 
    return $name_row['username']; 
} 

我上放置了一些錯誤,雖然有檢查,如果ID沒有被發現會發生什麼強烈的建議?

編輯:

如果你試圖做一個 「的preg_replace模板」,然後該行應爲:在修飾

'#@(.*?);#sie' => '"some before text".retrieveName("\1")."some after text"', 

'E' 來執行代碼。

這應該改變,例如「Hello,@lserni;,怎麼回事?」用「你好,有些文字之前的文字萊昂納多·塞切索姆,怎麼回事?」。

+0

你是完全正確的!我編輯了我原來的帖子,並做了一些修改。新問題是它沒有找到用戶,但是當它由於0行而返回sanitized_id時,這是正確的ID?我嘗試迴應它,它給「1美元」。有任何想法嗎? – Mike 2012-07-09 06:45:53

+0

代碼看起來是正確的。如果您沒有其他調試方法,請嘗試添加「die(」,我將poster_id作爲'$ poster_id'!「);」作爲retrieveName的第一行。這應該告訴你實際傳遞給retrieveName的內容:我懷疑那個'$ 1'。順便說一下,num_rows是數字,與0比較,而不是「0」 - 無論如何它都有效,但這是一個壞習慣。我知道,因爲我也有:-) – LSerni 2012-07-09 06:50:42

+0

...另外,在檢查數組是否存在之前取數組沒有任何意義。如果num_rows爲0,則立即返回。 (不要忘了釋放你的mysql查詢句柄 - 在小腳本中沒有什麼區別,但是在大腳本中,小的泄漏會迅速佔用大量內存) – LSerni 2012-07-09 06:52:33