2013-07-08 4 views
-1

Im пытается создать свой собственный рабочий шаблон с PHP функций, установленных для всех MySQLi командуетSQLI подключения и dissconnect в качестве функции ошибки

теперь вот мой config.php

<?php 

/** Configuration Variables **/ 

define ('DEVELOPMENT_ENVIRONMENT',true); 

if (DEVELOPMENT_ENVIRONMENT == true) { 
define('DB_NAME', 'rdb'); 
define('DB_USER', 'root'); 
define('DB_PASSWORD', 'root'); 
define('DB_HOST', 'localhost'); 
} else { 
define('DB_NAME', 'db47'); 
define('DB_USER', 'dbo'); 
define('DB_PASSWORD', 'S'); 
define('DB_HOST', 'd.db.1and1.com'); 

и это страница, что им вызов sql_functions.php

<?php 
//create db connection function 
function connect() 
{ 
$connect = mysqli_connect(DB_HOST , DB_USER , DB_PASSWORD, DB_NAME) 
or die ("Failed to connect to MySQL: " . mysqli_connect_error()); 
} 

//create db disconect function 
function disconnect() 
{ 
$close = mysqli_close(); 
} 

connect(); 
disconnect(); 

?> 

Теперь ив уже протестировал кон Функция nection но функция отключения продолжает приносить вверх следующее сообщение об ошибке Внимание: mysql_close(): нет ресурс MySQL-Link поставляется в R: \ UniServer \ WWW \ Application \ \ функции sql_functions.php по линии 12

я попытались вызвать переменную в функции подключения, поэтому функция disconnect() { $ close = mysqli_close ($ connect);}

но это все еще вызывает ошибки. , .Пожалуйста, помогите заблаговременно, и я все еще учился, поэтому скорее позволю объяснить мою ошибку, чтобы я мог исправить, а не только ответ, написанный для меня :)

ответ

-1

Это мое текущее решение, однако, финал будет в Mysqli

config.php

<?php 
/** Configuration Variables **/ 

define ('DEVELOPMENT_ENVIRONMENT',true); 

class Dbconfig { 
protected $host; 
protected $username; 
protected $password; 
protected $database; 

function Dbconfig(){ 
if (DEVELOPMENT_ENVIRONMENT == true) { 
$this -> host = 'localhost'; 
$this -> username = 'root'; 
$this -> password = 'root'; 
$this -> database= 'db'; 

} else { 
$this -> host = '.db.1and1.com'; 
$this -> username = 'dbo'; 
$this -> password = 'SW'; 
$this -> database = 'db4'; 

} 
} 

} 
?> 

connect.class.php

<?php 

class createConnection extends Dbconfig //create a class for make connection 
{ 

function connectToDatabase() // create a function for connect database 
{ 

    $conn= mysql_connect($this->host,$this->username,$this->password); 

    if(!$conn)// testing the connection 
    { 
     die ("Cannot connect to the database"); 
    } 

    else 
    { 

     $this->myconn = $conn; 

     echo "Connection established"; 

    } 

    return $this->myconn; 

} 

function selectDatabase() // selecting the database. 
{ 
    mysql_select_db($this->database); //use php inbuild functions for select database 

    if(mysql_error()) // if error occured display the error message 
    { 

     echo "Cannot find the database ".$this->database; 

    } 
    echo "Database selected..";  
} 

function closeConnection() // close the connection 
{ 
    mysql_close($this->myconn); 

    echo "Connection closed"; 
} 

//now test the connection 

} 
$connection = new createConnection(); //i created a new object 

$connection->connectToDatabase(); // connected to the database 

echo "<br />"; // putting a html break 

$connection->selectDatabase();// closed connection 

echo "<br />"; 

$connection->closeConnection(); 
?> 

теория позади него заключается в том, что данные db хранятся в файле config.php, который загружается через bootstrap.php, а затем классы загружаются приложенным тестом. кроме изменения в mysqli и удаления теста, кто-нибудь может увидеть, что я мог бы улучшить это, как в безопасности или легкости для использования на крупномасштабном сайте. Спасибо в продвинутом

1

Проблема variable scope. Функция disconnect() не имеет отношения к $connect.

Я бы не рекомендовал делать это таким образом. И хотя я также не рекомендую класс-оболочку, это лучше, чем такие функции. Вместо этого рассмотрите class, singleton, or global object, общий по dependency injection.

+0

благодарим вас за то, что нашли время, чтобы ответить, читали все в поле зрения, чтобы делать с одиночным и классом в основном 'http://thanura.blogspot.co.uk/2010/04/php5-db-connection-class -with-mysqli.html' для singleton и http: // www.daniweb.com/web-development/php/threads/190244/php-database-connection-class' для класса и задавался вопросом, есть ли какие-либо советы относительно который является лучшим методом для ООП и безопасности, похоже, много дискуссий в классах, даже прочитанных в некоторых местах, что классы НЕ являются хорошей практикой наряду с использованием PDO вместо mysqli. , любой совет, который нужно дать? –

+0

Лично я избегаю всего этого с помощью глобального объекта БД. Я создаю объект в файле конфигурации и передаю его (инъекция зависимостей) по мере необходимости. Что касается PDO или mysqli, это зависит от вас. Я использую mysqli, поскольку он предлагает несколько методов нижнего уровня, которые абстракция PDO не делает. Опять же, это * как я это делаю *, и я отнюдь не говорю, что это - способ сделать это *. –

0

изменить функцию отключения(), чтобы быть похожим на это:

function disconnect() 
{ 
mysqli_close(); 
} 

или

function disconnect() 
{ 
mysqli_close($connect); 
} 

если вы определяете функцию в переменную, то функция не будет выполнена. может это поможет: D