【问题标题】:mysqli_select_db() expects exactly 2 parameters, 1 given [duplicate]mysqli_select_db() 需要 2 个参数,1 个给定 [重复]
【发布时间】:2016-09-30 01:34:34
【问题描述】:

正在尝试解决此问题。我正在尝试将一个非常旧的 Wordpress 版本(当时称为 B2)恢复到工作状态。在对代码进行大量编辑以使其正常工作后,我现在得到了这个:

警告:mysqli_select_db() 需要 2 个参数,1 个在 /home/Redacted/public_html/b2-include/b2functions.php 第 31 行给出

这是有问题的代码段:

<?php

/* functions... */

function get_currentuserinfo() { // a bit like get_userdata(), on steroids
    global $HTTP_COOKIE_VARS,$user_login,$userdata,$user_level,$user_ID,$user_nickname,$user_email,$user_url,$user_pass_md5;
    // *** retrieving user's data from cookies and db - no spoofing
    $user_login = $HTTP_COOKIE_VARS["cafeloguser"];
    $userdata = get_userdatabylogin($user_login);
    $user_level = $userdata["user_level"];
    $user_ID=$userdata["ID"];
    $user_nickname=$userdata["user_nickname"];
    $user_email=$userdata["user_email"];
    $user_url=$userdata["user_url"];
    $user_pass_md5=md5($userdata["user_pass"]);
    $pref_usequicktags=$userdata["pref_usequicktags"];
    $pref_postnavigator=$userdata["pref_postnavigator"];
    $pref_showinactiveusers=$userdata["pref_showinactiveusers"];
    $pref_textarearows=$userdata["pref_textarearows"];
    $pref_confirm=$userdata["pref_confirm"];
    $pref_usespellchecker=$userdata["pref_usespellchecker"];
    // *** /retrieving
}


function dbconnect() {
    global $connexion, $server, $loginsql, $passsql, $base;

    $connexion = mysqli_connect($server,$loginsql,$passsql) or die("Couldn't connect! So sad :( <p>You should look into this!</p>");

    $connexionbase = mysqli_select_db($base) or die("Couldn't connect! So sad :( <p>You should look into this!</p>");

    return(($connexion && $connexionbase));
}

我在加载网站时遇到了错误。如有必要,我可以提供更多代码。

【问题讨论】:

  • 您不能只检查手动输入的此类错误吗?它已经说mysqli_select_db() expects exactly 2 parameters, 1 given

标签: php mysql wordpress


【解决方案1】:

作为社区 wiki 发布。我不想从这里获得代表,也不应该这样做。

$connexionbase = mysqli_select_db($base)

正如错误所述。您需要将 db 连接作为第一个参数传递:

$connexionbase = mysqli_select_db($connexion, $base)

参考:

手册中的示例:

bool mysqli_select_db (mysqli $link, string $dbname)

旁注:

return(($connexion && $connexionbase));

TBH,我从未见过这种类型的返回语法。据我所知,您只能返回一次或使用数组。

来自这个答案https://stackoverflow.com/a/3815243/1415724

你只能返回一个值。但是您可以使用本身包含其他两个值的数组: return array($uid, $sid);

只需使用 4 个参数即可:

$connexion = mysqli_connect($server,$loginsql,$passsql, $base)

按照说明书:

如果真的需要,则返回。

return $connexion;

另外,您为什么打算使用 MD5 来存储密码?该散列函数不再被认为可以安全使用。

你最好使用password_hash()

毕竟这是 21 世纪。

$HTTP_COOKIE_VARS,已弃用。

我不知道您为什么要使用该代码或从哪里获得它。

【讨论】:

  • 只是为了添加一个注释,很可能 OP 只是测试它是否已连接,连接的布尔测试和数据库本身,并在此答案中涵盖,应该使用带有 4 个参数的 mysqli_connect (第四个参数是数据库名称)
  • @Ghost 是的,但很难准确地说出它的用途,而且他们也在使用已弃用的$HTTP_COOKIE_VARS,正如我在回答中所指出的那样,还有其他一些好东西;-)跨度>
  • @Ghost 但是,return(($connexion &amp;&amp; $connexionbase)); 似乎不正确,我已在答案中对此进行了说明。
【解决方案2】:

您需要将数据库名称传递给您的mysqli_select_db() 函数。现在你不正确地传递连接,你需要第二个参数,否则它不知道该怎么做。尝试将其更新为:

$connexionbase = mysqli_select_db(connexion, $base) ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多