PHP:是否可以使用返回 mysqli_connect() 的函数创建 MySQL 连接?
PHP: Is it possible to create a MySQL connection with a function returning mysqli_connect()?
我想做的是使用 returns(或者我希望它会)mysqli_result 的随机函数创建到 MySQL 数据库的连接。不幸的是它不起作用。它 return 是布尔值。
函数:
function itsName()
{
$host="localhost";
$user="root";
$password="";
$database="";
return mysqli_connect($host,$user,$password,$database);
}
当我尝试创建连接并在查询中使用它时:
$con = itsName();
$query = mysqli_query($con, "ANY QUERY");
$fetch = mysqli_fetch_assoc($query);
任何普通查询都不会响应错误,但是当我尝试将其提取到 assoc 数组时,会出现以下错误:
Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\site\site.php on line X
很明显 itsName
函数 return 是布尔值而不是 mysqli_result。
我的问题是,是否有可能实现我在这里尝试做的事情?使我的函数 return 成为 mysqli_result 而不是布尔值。
如果是这样,请帮助我了解代码的外观。
请不要问我为什么要尝试做这样的事情。只是一个实验。
我想你要找的是这样的:
function Connect($hostName = null, $username = null, $password = null, $dbName = null, $port = null, $socket = null, $flags = null)
{
$link = mysqli_init();
$link->real_connect($hostName, $username, $password, $dbName, $port, $socket, $flags)
or die("Failed to connect to the server");
return $link;
}
$link = Connect("localhost", "username", "password", "db_name");
$link->query("SELECT * FROM `table` WHERE 1;");
您也可以使用 real_connect
来确定 return:
return $link->real_connect($hostName, $username, $password, $dbName, $port, $socket, $flags) ? $link : false;
然后有:
$link = Connect("localhost", "username", "password", "db_name");
if (!$link)
die("Failed to connect to the server");
但老实说,我不明白你为什么要包装它?
注意这使用 OOP 方法而不是您在问题中使用的实用版本。
编辑
你得到布尔值的原因是因为 mysqli_connect
和 real_connect
都是 return boolean
类型,这意味着你必须创建一个 link 某种形式,然后 return 它就像我在我的 Connect
函数示例中那样。
重要!另外,使用mysqli_init
时,需要保证后面的第一个mysqli函数是real_connect
,否则会报异常.
我想做的是使用 returns(或者我希望它会)mysqli_result 的随机函数创建到 MySQL 数据库的连接。不幸的是它不起作用。它 return 是布尔值。 函数:
function itsName()
{
$host="localhost";
$user="root";
$password="";
$database="";
return mysqli_connect($host,$user,$password,$database);
}
当我尝试创建连接并在查询中使用它时:
$con = itsName();
$query = mysqli_query($con, "ANY QUERY");
$fetch = mysqli_fetch_assoc($query);
任何普通查询都不会响应错误,但是当我尝试将其提取到 assoc 数组时,会出现以下错误:
Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\site\site.php on line X
很明显 itsName
函数 return 是布尔值而不是 mysqli_result。
我的问题是,是否有可能实现我在这里尝试做的事情?使我的函数 return 成为 mysqli_result 而不是布尔值。 如果是这样,请帮助我了解代码的外观。
请不要问我为什么要尝试做这样的事情。只是一个实验。
我想你要找的是这样的:
function Connect($hostName = null, $username = null, $password = null, $dbName = null, $port = null, $socket = null, $flags = null)
{
$link = mysqli_init();
$link->real_connect($hostName, $username, $password, $dbName, $port, $socket, $flags)
or die("Failed to connect to the server");
return $link;
}
$link = Connect("localhost", "username", "password", "db_name");
$link->query("SELECT * FROM `table` WHERE 1;");
您也可以使用 real_connect
来确定 return:
return $link->real_connect($hostName, $username, $password, $dbName, $port, $socket, $flags) ? $link : false;
然后有:
$link = Connect("localhost", "username", "password", "db_name");
if (!$link)
die("Failed to connect to the server");
但老实说,我不明白你为什么要包装它?
注意这使用 OOP 方法而不是您在问题中使用的实用版本。
编辑
你得到布尔值的原因是因为 mysqli_connect
和 real_connect
都是 return boolean
类型,这意味着你必须创建一个 link 某种形式,然后 return 它就像我在我的 Connect
函数示例中那样。
重要!另外,使用mysqli_init
时,需要保证后面的第一个mysqli函数是real_connect
,否则会报异常.