gpt4 book ai didi

PHP - 如何让 mysqli_connect() 返回资源,以便它可以与 Define() 一起使用

转载 作者:行者123 更新时间:2023-11-29 07:11:23 24 4
gpt4 key购买 nike

我在 PHP 中测试不同的 MySQL 连接方法时注意到了一些事情。

在 PHP 中连接数据库时,我通常使用 odbc_connect()。我将 odbc_connect() 返回的资源变量保存为全局常量(使用 Define() 函数),以便在整个应用程序中方便地访问。就像这样:

使用 odbc_connect() 并将返回值保存到常量中效果很好:

<?php
define("_conn", odbc_connect("Driver={MySQL ODBC 5.3 Unicode Driver};Database=MyDB;", "user", "pass"));
?>

将 mysql_connect()(已弃用的)的返回值保存到常量中也可以正常工作:

<?php
define("_conn", mysql_connect("localhost", "user", "pass", "MyDB"));
?>

但是,尝试将 mysqli_connect() 的返回值保存到常量中不起作用:

<?php
define("_conn", mysqli_connect("localhost", "user", "pass", "MyDB"));
?>
Warning: Constants may only evaluate to scalar values in C:\...\script.php on line 164

这很不幸,因为最好使用 mysqli_connect() 建立连接并将句柄保存到常量中,而 odbc_connect() 不可用。我做了研究,发现我可以与 MySQL 一起使用的唯一两个返回 RESOUCE 的数据库连接函数(并且可以与 Define() 函数一起使用)是 odbc_connect() 和 mysql_connect() (已弃用的函数)。请参阅此链接:http://php.net/manual/en/resource.php

有没有办法让 mysqli_connect() 返回 RESOUCE,以便我可以在常量中使用它的返回值(使用 Define() 函数)?

PDO 也不返回 RESOUCE。

最佳答案

我建议在这种情况下使用单例模式这是一个例子:

<?php
class PDOConnection {

/**
* singleton instance
*
* @var PDOConnection
*/
protected static $_instance = null;

/**
* Returns singleton instance of PDOConnection
*
* @return PDOConnection
*/
public static function instance() {

if ( !isset( self::$_instance ) ) {

self::$_instance = new PDOConnection();

}

return self::$_instance;
}

/**
* Hide constructor, protected so only subclasses and self can use
*/
protected function __construct() {}

function __destruct(){}

/**
* Return a PDO connection using the dsn and credentials provided
*
* @param string $dsn The DSN to the database
* @param string $username Database username
* @param string $password Database password
* @return PDO connection to the database
* @throws PDOException
* @throws Exception
*/
public static function getConnection() {


$dsn = 'mysql:dbname=_____;host=_____';
$username = '_____';
$password = '_____';

$conn = null;
try {

$conn = new \PDO($dsn, $username, $password);

//Set common attributes
$conn->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);

return $conn;

} catch (PDOException $e) {

//TODO: flag to disable errors?


}
catch(Exception $e) {

//TODO: flag to disable errors?


}
}

/** PHP seems to need these stubbed to ensure true singleton **/
public function __clone()
{
return false;
}
public function __wakeup()
{
return false;
}
}

?>

然后您可以从任何地方使用它:

$dbh =  PDOConnection::getConnection();

关于PHP - 如何让 mysqli_connect() 返回资源,以便它可以与 Define() 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39575510/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com