mysql_real_escape_string():在数据库插入中拒绝访问

时间:2019-02-15 14:49:33

标签: mysql mediawiki

我正在尝试在PHP 5.6和更高版本上使用旧版MediaWiki扩展,并且在涉及数据库插入时失败。

是的,这不是重复的代码,因为代码不同。

完整错误是:

  

警告:mysql_real_escape_string():拒绝用户访问   ``@'localhost'(使用密码:否)

我尝试更改为mysqli_real_escape_string,但后来遇到了

  

mysqli_real_escape_string()恰好需要2个参数,其中1个给定   235行

功能如下:

function Lookup_addLookup ($url, $name, $group)
{
    $dbw = wfGetDB(DB_MASTER);

    $groupOrder = Lookup_getGroupOrder($group);
    $dbw->query ("INSERT INTO ".Lookup_prefix()."lookups (lu_name, lu_url, lu_group, lu_order, lu_group_order) VALUES ('".mysql_real_escape_string($name)."', '".mysql_real_escape_string($url)."', '".mysql_real_escape_string($group)."', 1, $groupOrder)");

    Lookup_reOrderGroups();
    return true;
}

再往下走:

function Lookup_moveGroupUp($group)
{
    $dbw = wfGetDB(DB_MASTER);

    $dbw->query ("UPDATE ".Lookup_prefix()."lookups SET lu_group_order = 0 WHERE lu_group = '".mysqli_real_escape_string($group)."'");

    Lookup_reOrderGroups();

    return true;
}

1 个答案:

答案 0 :(得分:2)

mysqli_real_escape_string()需要数据库链接作为第一个参数,这就是为什么它不起作用的原因。

但是,MediaWiki wants us to avoid direct queries,因此它具有$dbw->insert()方法,是几种wrapper functions之一。

使用类似这样的内容:

function Lookup_addLookup ($url, $name, $group)
{
    $dbw = wfGetDB(DB_MASTER);

    $groupOrder = Lookup_getGroupOrder($group);
    $dbw->insert(
        Lookup_prefix()."lookups",
        array(
            'lu_name'  => $name,
            'lu_url'   => $url,
            'lu_group' => $group,
            'lu_order' => 1,
            'lu_group_order' => $groupOrder
        )
    );

    Lookup_reOrderGroups();
    return true;
}

在第二个示例中,使用$dbw->update()

function Lookup_moveGroupUp($group)
{
    $dbw = wfGetDB(DB_MASTER);

    $dbw->update(
        Lookup_prefix()."lookups",
        array(
            "lu_group_order" => 0
        ),
        array(
            "lu_group" => $group
        )
    );

    Lookup_reOrderGroups();

    return true;
}

有关更多信息和其他SQL包装器,请阅读有关different wrapper functions及其documentation的信息。