【问题标题】:How to check database with an array parameter?如何使用数组参数检查数据库?
【发布时间】:2012-07-09 06:08:02
【问题描述】:

嗨,我有一个数组,我想将一个变量传递给一个函数。

'#\@(.*?)\;#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

【问题讨论】:

    标签: php arrays function parameters


    【解决方案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'来执行代码。

    这应该改变,例如,“你好,@lserni;怎么样?”与“你好,一些文本之前的文本Leonardo Sernisome 文本之后,怎么样?”。

    【讨论】:

    • 你完全正确!我编辑了我的原始帖子,并进行了一些修改。新问题是它没有找到用户,但是当它因为 0 行返回 sanitized_id 时,那是正确的 id 吗?我尝试回应它,它给出了“$ 1”。有什么想法吗?
    • 代码看起来是正确的。如果您没有其他调试方法,请尝试添加“ die("I got poster_id as '$poster_id'!"); ”作为retrieveName 的第一行。这应该可以让您了解实际传递给retrieveName 的内容:我怀疑那个'$ 1'。顺便说一句,num_rows 是数字,与 0 比较,而不是与“0”比较——它无论如何都有效,但这是一个坏习惯。我知道,因为我也有:-)
    • ...另外,在检查数组是否存在之前获取数组是没有意义的。如果 num_rows 为 0,则立即返回。 (不要忘记释放你的 mysql 查询句柄——在小脚本中没有区别,但在大脚本中,小泄漏很快就会占用大量内存)
    • 是的,它抛出了“我的 poster_id 为 '$1'!”我唯一的猜测是,无论出于何种原因,$1 都被当作文字字符串,这就是为什么它将它发送到retrieveName。谢谢,我完全跳过了“0”。
    • 我以为 $1 是占位符。在单引号之间,$ 不起作用,因此 '$1' 是字符串文字“一美元”。但我正在编辑我的答案......
    猜你喜欢
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 2013-12-07
    • 2021-09-14
    • 2021-06-27
    • 1970-01-01
    相关资源
    最近更新 更多