PHP将mysql连接放在一个单独的函数中


PHP put mysql connection in a separate function

我想把连接到mysql的代码放在PHP的一个单独的函数中,然后在其他函数中使用该函数。令人惊讶的是,我一直找不到关于如何做到这一点的在线资源。我想做这样的事情:

function connect_mysql() {
$con = mysqli_connect("localhost", "root", "somepass", "testdb");
if (mysqli_connect_errno($con)) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
return $con;
}
function some_function() {
connect_mysql(); 
// and use that connection here 
//so that I don't have to retype connection code again
}

非常感谢!

我会按照以下方式来做,在connect_mysql中使用一个静态变量,这样只会创建一个MySQL连接:

function connect_mysql() {
    static $con = null;
    if ($con == null) {
        $con = mysqli_connect("localhost", "root", "somepass", "testdb");
        if (mysqli_connect_errno($con)) {
            echo "Failed to connect to MySQL: " . mysqli_connect_error();
            return null;
        }
    }
    return $con;
}
function some_function() {
    $con = connect_mysql();
    $con->prepare(...);
}

这是singleton模式的一个示例。

两个需要考虑的问题:

(1) 如果您想在函数some_function()中继续该对象,请使用一个变量:

示例:

function some_function() {
    $my = connect_mysql();
    $my->query('some great sql query...');
}

(2) 为了改进你的连接功能connect_mysql(),当它连接失败时,你应该用一个定义的状态退出它,可能是这样的:

function connect_mysql() {
    $con = mysqli_connect("localhost", "root", "somepass", "testdb");
    if (mysqli_connect_errno($con)) {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
        return false;   // <- exit here....
    }
    return $con;
}

这不一定是必需的,但它可以帮助您检测函数之外的问题,并在代码变大时维护代码。