PHP: использование DB-соединения внутри класса - PullRequest
0 голосов
/ 20 октября 2018

Я обновляю 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 голосов
/ 20 октября 2018

Вот то, с чем я недавно работал

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 здесь

0 голосов
/ 20 октября 2018

В качестве основного шаблона используется что-то вроде: передать соединение с базой данных в конструктор (внедрение зависимости), а затем сохранить его в переменной экземпляра (в данном случае $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();
...