2012-02-16 2 views
2

Я php noob. Я пытаюсь сделать файл подключения к базе данных в класс (нужно ли быть приватным, статическим или чем-то?). Netbeans теперь выдает ошибки, и я получаю 500 внутренних ошибок сервера, когда я пытаюсь запустить его из браузера. Кажется, я пропустил что-то простое! ThanksОшибка PHP-класса - noob

<?php 
class config{ 

//define server, username, password and database 
var $db_host="domain.co.uk.mysql"; 
var $db_user="user";     
var $db_password="password";  
var $db_name="dbname"; 
var $db_tableprefix="tableprefix"; 
//connect to MySQL server 
mysql_connect($db_host,$db_user,$db_password); 

//select the database 
@mysql_select_db($db_name) or die ("Unable to select database: " . mysql_error()); 

} 
?> 
+2

Посмотрите, как создавать классы php ... у вас нет методов. Вы нуждаетесь в них, чтобы вы могли создать экземпляр своего класса и использовать ваше соединение. Поскольку вы noob, как вы сказали, попробуйте использовать CodeIgniter, вам очень поможет ... – Gerep

+1

У вас есть ошибка синтаксиса +, написанная для PHP4. Попытайтесь немного прочитать это (http://www.php.net/manual/en/language.oop5.basic.php) и вернуться, если вы все еще не можете заставить его работать. – KillerX

ответ

2

Ни одно из ваших заявлений в методах. И вы не создали экземпляр класса и вызвали метод, который будет выполнять ваши заявления.

Классы предназначены для объектно-ориентированного программирования. У вашего класса есть только старый обычный процедурный код в классе, который не будет работать.

<?php 
    class config{ 

     //define server, username, password and database 
     var $db_host="domain.co.uk.mysql"; 
     var $db_user="user";     
     var $db_password="password";  
     var $db_name="dbname"; 
     var $db_tableprefix="tableprefix"; 

     public function connect() { 
      //connect to MySQL server   
      mysql_connect($db_host,$db_user,$db_password); 

      //select the database 
      @mysql_select_db($db_name) or die ("Unable to select database: " . mysql_error()); 
     } 

    } 

    $var = new config(); 
    $var->connect(); 

?> 
0

При создании класса, вы должны знать, как все будет работать ... иметь свойства, методы и т.д. .. Просто писать класс не будет делать эту работу. Определите, что вы хотите сделать - общий соединитель класса mysql, какая-то конкретная задача?

1

Старые библиотеки mysql не подходят для объектно-ориентированных классов. Используйте MySQLi, как это ...

class config{ 
    //define server, username, password and database 
    private $db_host="domain.co.uk.mysql"; 
    private $db_user="user";     
    private $db_password="password";  
    private $db_name="dbname"; 
    private $db_tableprefix="tableprefix"; 

    //connect to MySQL server 
    public static function getConnection(){ 
     return new mysqli($db_host,$db_user,$db_password, $db_name); 
    } 
} 

Затем вызовите ваш класс следующим образом:

$conn = config::getConnection(); 

Вы можете использовать соединение, как:

$result = $conn->query("select * from sometable;"); 
var_dump($result); 

Кроме того, вы можете назвать ваш класс что-то другое, чем config .... возможно, DbConnection и поместил его в файл сам по себе DbConnection.php

Удачи!

1

Для аргументации здесь я предполагаю, что ваш класс под названием «config» предназначен для хранения гораздо большего, чем просто информация о конфигурации для базы данных. В этом случае я бы сделал класс с именем config, в котором есть ваши настройки конфигурации.

class config { 
    //define server, username, password and database 
    var $db_host="domain.co.uk.mysql"; 
    var $db_user="user";     
    var $db_password="password";  
    var $db_name="dbname"; 
    var $db_tableprefix="tableprefix"; 
} 

И класс для объекта БД, который должен расширить объект Mysqli, так как он более эффективен, чем процедурные функции MySQL и построил для объектно-ориентированного программирования:

class db extends mysqli { 
     protected static var $dbo = NULL; 
     public static function &getInstance() { 
      //load config 
      $config = new config(); 
      if(self::$dbo === NULL) self::$dbo = new db($config->db_host,$config->db_user,$config->db_password, $config->db_name); 
     } 
     return self::$dbo; 
    } 

Это позволит вам построить другие функции в ваш класс DBO, и это предотвратит выполнение сценария дублирования подключений к базе данных. Если вы хотите использовать соединение с базой данных, звоните:

$db = db::getInstance(); 

И вы будете получать экземпляр класса дб (Mysqli), который можно использовать там.