2016-05-10 3 views
0

Я пытаюсь создать соединение, используя функцию в другом файле php. Поэтому я могу получить к нему доступ в каждом файле php. Как я могу вызвать функцию внутри моего class из другого php-файла. Каким образом можно создать экземпляр моей функции, я поставлю ее в верхнюю часть моего файла или внутри моего класса? Я пытаюсь запустить свою систему, но соединение не будет загружаться.Использование функции для создания соединения

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); 
?> 
+1

Не следует ли '$ myDatabase' на линии, где вы определяете ваше заявление быть просто' $ myConnection'? – Dacaspex

+0

Передайте '$ myConnection' как аргумент для конструктора, например. –

+0

'error_reporting (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); 
+0

Я предпочитаю ваш первый пример! Так рад, что ты помог :) – Francisunoxx

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

Смежные вопросы