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

mysql_real_escape_string(): Access denied in DB insert

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

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

完整的错误是:

Warning: mysql_real_escape_string(): Access denied for user ''@'localhost' (using password: NO)

我尝试更改为 mysqli_real_escape_string 但后来我有:

mysqli_real_escape_string() expects exactly 2 parameters, 1 given on line 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;
}

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

然而,MediaWiki wants us to avoid direct queries, so it has the $dbw->insert() method instead, one of several 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 and their documentation