我正在尝试在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;
}
答案 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的信息。