函数内的mysqli_connect包含失败,为什么?

时间:2014-05-13 21:36:09

标签: php mysqli

我见过几个人有同样的问题,但没有一个答案解决了我的问题。这就是我在三个文件中的内容:

的index.php:

 $dbconnect = connectDB("mydb","connect");
 mysqli_query($dbconnect,"INSERT INTO `mytable` (field1,field2) values ('value 1','value 2')");
 connectDB("","kill",$dbconnect);

的functions.php

 function connectDB($db_name,$connectorkill,$link) { include('connectDB.inc.php'); }

connectDB.inc.php

 $host="localhost";
 $user="myusername";
 $pass="mypassword";
 if($connectorkill == "connect") {  
 if($dblink = mysqli_connect($host, $user, $pass, $db_name)) {
 echo "dblink created.";
  return $dblink;
 } else { echo "Error connecting to database."; }  
 } elseif($connectorkill == "kill") { mysqli_close($link); }

我得到的是:

 Warning: mysqli_query() expects parameter 1 to be mysqli, null given in /home/username/public_html/members/index.php on line 2

看起来像connectDB函数没有完成它的工作,特别是在connectDB.inc.php中返回$ dblink变量。我继续将connectDB.inc.php中的代码移到functions.php中,它解决了问题,但我不希望它以这种方式设置。有没有办法解决这个错误?

1 个答案:

答案 0 :(得分:1)

两种解决方案:

解决方案1 ​​:根据以下内容对代码进行折射:

的config.php:

$config = array(
    "databases" => array(
        "my_database" => array(
            "host"  =>  "localhost",
            "user"  =>  "myusername",
            "pass"  =>  "mypassword"
        )
    )
);

的functions.php:

require("config.php");

function connectDB($dbname)
{
    global $config;

    if (!isset($config["databases"][$dbname]))
        return; // error, database info not in $config

    $dbc = $config["databases"][$dbname];

    $dbcon = mysqli_connect($dbc["host"], $dbc["user"], $dbc["pass"], $dbname);
    if (!$dbcon)
        return; // unable to connect error goes here

    return $dbcon;
}

请注意,这只是connectDB函数的最低要求。确实应该有更多的错误检查(例如,在每个$dbc键上。它还需要正确的错误报告,这样,这只是正确方向的一般提示。

解决方案2 :在您的包含前添加return

function connectDB($db_name,$connectorkill,$link) { return include('connectDB.inc.php'); }

无论解决方案如何:真的需要在index.php中使用一些错误检查代码,因为无论你做什么:你的connectDB函数总是不会返回有效的数据库连接