2012-07-09 57 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