【问题标题】:mysql_real_escape_string(): Access denied in DB insertmysql_real_escape_string():在数据库插入中拒绝访问
【发布时间】:2019-02-15 14:49:33
【问题描述】:

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

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

完整的错误是:

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

我尝试更改为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;
}

【问题讨论】:

标签: mysql mediawiki


【解决方案1】:

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

【讨论】:

  • 谢谢!这给了我:mysqli_real_escape_string() 期望参数 1 是 mysqli,第 235 行给出的对象 [这是以 $dbw->query 开头的行]
  • @greektranslator 这个怎么样?
  • 该死,我还有一个更远的地方(我编辑了原帖)
  • 太棒了,感谢您提供额外的查询帮助,我试过但无法弄清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-04
  • 2020-12-07
  • 2016-03-02
  • 2014-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多