使用函数创建连接


Using function to create a connection

我正试图使用另一个php文件中的函数创建一个连接。所以我可以在每个php文件中访问它。如何从另一个php文件调用class中的函数。创建函数实例的正确方法是什么?我会把它放在文件的顶部还是类中?我试图运行我的系统,但连接无法加载。

connection.php

<?php
DEFINE ('host', 'localhost');
DEFINE ('username', 'root');
DEFINE ('password', '');
DEFINE ('database', 'librarysystem');
function getConnection()
{
$myDB = mysqli_connect(host,username,password,database);
if (!$myDB)
{
    trigger_error ('Could not connect to MySQL: ' . mysqli_connect_error());
}
else
{
    return $myDB;
}
}                         
?>

另一个我要调用函数或方法的文件。

loginCRUD.php

<?php
error_reporting(0);
require_once ('../connection/connection.php');
$myConnection = getConnection();
class loginCRUD
{
public function readLogin($dbusername,$dbpassword)
{
    $statement = $myConnection->prepare("SELECT * FROM loginmodule WHERE loginUsername = ? AND loginPassword = ? LIMIT 1");
    $statement->bind_param("ss", $dbusername, $dbpassword);
    if($statement->execute())
    {
        $result = $statement->get_result();
        if($result->num_rows)
        {
            $row = $result->fetch_assoc();
            return $row;
        }
        else
        {
            return false;
        }
    }
    else
    {
        return false;
    }
}
}
(new loginCRUD)->readLogin($dbusername,$dbpassword);
?>

至少有两种可能的方法可以将$myConnection传递给loginCRUD类。

第一个是在类本身中创建$myConnection

class loginCRUD
{
    protected $dbCon;
    public function __construct() 
    {
       $this->dbCon = getConnection();
    }
    public function readLogin($dbusername,$dbpassword)
    {
        $statement = $this->dbCon->prepare("YOUR SQL")
        // other codes
    }
}
(new loginCRUD)->readLogin($dbusername,$dbpassword);

第二步是将$myConnection作为参数传递给类构造函数:

class loginCRUD
{
    protected $dbCon;    
    public function __construct($myCon) 
    {
       $this->dbCon = $myCon;
    }
    public function readLogin($dbusername,$dbpassword)
    {
        $statement = $this->dbCon->prepare("YOUR SQL")
        // other codes
    }
}
$myConnection = getConnection();
(new loginCRUD($myConnection))->readLogin($dbusername,$dbpassword);

出现错误的原因是您的变量范围。在loginCRUD类中,试图访问一个名为myConnection的变量,但它找不到,因为函数的作用域仅为该函数。它不知道您指的是全局声明的变量。解决此问题的正确方法应该是:

...
public function readLogin($dbusername,$dbpassword)
{
    global $myConnection;
    $statement = $myConnection->prepare("SELECT * FROM loginmodule WHERE loginUsername = ? AND loginPassword = ? LIMIT 1");
    $statement->bind_param("ss", $dbusername, $dbpassword);
    if($statement->execute())
    {
...

供参考:访问类定义之外的变量和方法