PHP:在类

时间:2018-10-20 12:02:38

标签: php mysqli php-7

我正在从PHP5.6更新到PHP7.0,并且不再起作用:

$con=mysqli_connect(DATABASE_SERVER,DATABASE_USER,DATABASE_PASSWORD) or die(DATABASE_ERROR);
mysqli_select_db($con, DATABASE_NAME) or die(DATABASE_ERROR);

class DoSomeStuff()

{

    function GetSomeDate()
    {
    $result=mysqli_query($con, "SELECT * FROM my_table");
    }

}

好像$ con变量在类内部不可用。

我必须要这样吗?

global $con=mysqli_connect()

谢谢!

2 个答案:

答案 0 :(得分:2)

使用的主要模式类似于将数据库连接传递给构造函数(依赖注入),然后将其存储在实例变量(在这种情况下为$this->con)中。然后,以后的数据库调用只需使用$this->con进行数据库连接...

$con=mysqli_connect(DATABASE_SERVER,DATABASE_USER,DATABASE_PASSWORD) or die(DATABASE_ERROR);
mysqli_select_db($con, DATABASE_NAME) or die(DATABASE_ERROR);

class DoSomeStuff
{
    private $con;

    // Create instance with connection
    public function __construct( $con )  {
        // Store connection in instance for later use
        $this->con = $con;
    }
    public function doSomething() {
        // Run query using stored database connection
        $result=mysqli_query($this->con, "SELECT * FROM my_table");
    }

}

// Create instance, passing in connection
$some = new DoSomeStuff ($con);
$some->doSomething();

答案 1 :(得分:0)

这是我最近使用过的东西

class Database {

private $_conn = null;

public function getConnection($password) {
    if (!is_null($this->_conn)) {
        return $this->_conn;
    }
    $this->_conn = false;
    try {
        $this->_conn = new PDO("mysql:host=localhost;dbname=databasename", 'root', 
$password);
            $this->_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            } catch(PDOException $e) {
            echo "Connection failed: " . $e->getMessage();
        }
        return $this->_conn;
    }
}

function conOpen() {
$servername = "localhost";
$username = "root";
$password = "password";

$db = new Database();
$conn = $db->getConnection($password);
return $conn;
}

然后像这样使用它

$con = conOpen();

您可以检出PDO连接here