【问题标题】:Passing MySql connection in php在php中传递MySql连接
【发布时间】:2013-06-12 11:50:53
【问题描述】:

我尝试将 mysqli 连接脚本放入一个 php 函数中,各种 php 文件可以调用该函数来连接到数据库。我创建了以下函数:

public function connectToDatabase() {

    $con = mysqli_connect($databaseHost, $databaseUsername, $databasePassword, $databaseName);

    echo "<br><br>";

    if (mysqli_connect_errno($con)) {
        echo "Failed to connect to MySQL:" . mysqli_connect_error();
    } else {
        echo "Connection successful";
    }

    return $con;
}

然后我使用(已包含上述文件)从另一个文件调用该函数:

$con = connectToDatabase();

然而,虽然顶部函数中的代码工作正常,但在变量 $con 中传递连接似乎不起作用。我突然想到,当连接到达 return 语句时,连接会自动关闭。是这样吗?如果是这样,我该如何阻止它?

非常感谢

【问题讨论】:

标签: php mysql mysqli


【解决方案1】:

虽然您的问题已在 cmets 中得到解答,但最好将连接构建为 Singleton 类,这样您就不会在整个代码中打开连接的多个实例:

class DatabaseConnection {

    const HOST     = 'localhost';
    const USERNAME = 'not_root';
    const PASSWORD = 'not_blank';
    const NAME     = 'your_db';

    private static $_instance;

    // Private constructor prevents instantiation
    private function __construct() {
    }

    public static function getInstance() {
        if (!self::$_instance) {
            self::$_instance = mysqli_connect(self::HOST, self::USERNAME, self::PASSWORD, self::NAME);
            if (mysqli_connect_errno(self::$_instance)) {
                throw new Exception("Failed to connect to MySQL:" . mysqli_connect_error());
            }
        }
        return self::$_instance;
    }
}

然后,这样称呼它:

try {
    $con = DatabaseConnection::getInstance();
} catch (Exception $e) {
    // Handle exception
    echo $e->getMessage();
}

【讨论】:

  • 有趣...如果我使用单例,是否需要在调用 getInstance() 函数之前创建一个新对象?
  • 没有。单例是静态工作的,所以你永远不需要实例化它。
猜你喜欢
  • 1970-01-01
  • 2011-03-15
  • 2020-05-17
  • 2011-01-08
  • 1970-01-01
  • 1970-01-01
  • 2016-07-12
  • 1970-01-01
  • 2020-12-11
相关资源
最近更新 更多