使用函数创建连接

时间:2016-05-10 17:08:00

标签: php oop

我正在尝试使用我的其他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);
?>

2 个答案:

答案 0 :(得分:1)

至少有两种方法可以将$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);

答案 1 :(得分:0)

您收到错误的原因是您的变量范围。在您的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())
    {
...

供参考:Accessing variables and methods outside of class definitions