2012-02-28 3 views
1

Я хочу загрузить файл конфигурации в класс. Вот содержание config.phpзагрузить config.php с классом

<?php 
$__error_reporting_level=1; 
$server='localhost'; 
$user='root'; 
$password=''; 
$dbase='eauction'; 
?> 

Содержание sql.php

<?php 
include ('config.php'); 
error_reporting($__error_reporting_level); 

class sql 
{ 
function connect() 
{ 
    $connections = mysql_connect($server, $user,$password) or die ('Unabale to connect to the database'); 
    mysql_select_db($dbase) or die ('Unable to select database!'); 
    return; 
} 

function login($email, $pwd) 
{ 
    $this->connect(); 
    $result = $this->qry("SELECT uid,nameF FROM user WHERE email='".$email."' AND password='".$pwd."'"); 
    $row=mysql_fetch_array($result); 
    if (mysql_num_rows($result)>0) 
    return array($row[0],$row[1]); 
    else 
    return array(0,0); 
} 
} 
?> 

я выполнить код с помощью

include ('core/sql.php'); 
$obj = new sql; 
$data=$obj->login($email,$pwd); 
print_r($data); 

Я получаю эту ошибку

Невозможно выберите базу данных!

Игнорировать MySQL вопрос инъекции, мне просто нужно выполнить код совершенно

+0

Вы не можете использовать $ сервер, $ пользователя и т.д. в функции класса непосредственно. –

+0

Почему вы все еще создаете «классы базы данных» вместо использования PDO или MySQLi (если вы живете в сфере mysql-only)? –

+0

убедитесь, что имя базы данных правильно. –

ответ

1

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

<?php 
class ConnectionSettings { 
    private $hostname = 'localhost'; 
    private $username = 'root'; 
    private $password = ''; 
    private $db = 'cordiac_db'; 
    protected $connLink; 

    // protected 'connect()' method 
    protected function connect(){ 

     // establish connection 
     if(!$this->connLink = mysql_connect($this->hostname, $this->username, $this->password)) { 
      throw new Exception('Error connecting to MySQL: '.mysql_error()); 
     } 

     // select database 
     if(!mysql_select_db($this->db, $this->connLink)) { 
      throw new Exception('Error selecting database: '.mysql_error()); 
     } 
    } 
} 
4

Читайте на variable scope in the PHP manual.

Вы включили файл перед объявлением класса в глобальную область, недоступный для области методов класса. Если вы хотите использовать эти переменные внутри методов класса, вам нужно либо получить к ним доступ глобально через $GLOBALS[], либо ключевое слово global, или, еще лучше, передать их в функцию, которая их использует.

include ('config.php'); 
// Now all your variables are defined at global scope!!! 
error_reporting($__error_reporting_level); 

class sql 
{ 
// Pass as params to the function 
function connect($server, $user, $password, $dbase) 
{ 
    $connections = mysql_connect($server, $user,$password) or die ('Unabale to connect to the database'); 
    mysql_select_db($dbase) or die ('Unable to select database!'); 
    return; 
} 
// etc... 
// etc... 
} 

Вы могли бы также рассмотреть возможность их как свойства класса, и передавая их в конструкторе:

class sql 
{ 
    public $server; 
    public $user; 
    public $password; 
    public $dbase; 

    public function __construct($server, $user, $password, $dbase) { 
    $this->server = $server; 
    $this->user = $user; 
    // etc... 
    $connections = mysql_connect($this->server, $this->user, $this->password); 
    } 
} 
1

Попробуйте

config.php 
define('SERVER',$server); 
define('USER',$user); 
define('PASSWORD',$password); 
define('DBASE',$dbase); 



----------class----------  
<?php 
include ('config.php'); 
error_reporting($__error_reporting_level); 

class sql 
{ 
protected $server=SERVER; 
protected $user=USER; 
protected $password=PASSWORD; 
protected $dbase=DBASE; 
private function connect() 
{ 
    $connections = mysql_connect($this->server, $this->user,$this->password) or die ('Unabale to connect to the database'); 
    mysql_select_db($this->dbase) or die ('Unable to select database!'); 
    return; 
} 
........ 
........ 
+0

Я хочу сохранить и загрузить параметр mysql_connect из config.php, поэтому мне не нужно его обновлять! – Sourav

+0

Переменные по-прежнему выходят за рамки внутри класса ... –

8

Почему бы не использовать ini-файл?

config.ini

server=test 
user=root 
pass=pass 
dbname=mydb 

и в вашем классе есть что-то вроде

class A { 

    public $config; 

    public function __construct() { 
     $this->config = parse_ini_file('config.ini', true); 
    } 

    public function sql() { 
     $connections = mysql_connect($this->config['server'], $this->config['user'],$this->config['password']) or die ('Unabale to connect to the database'); 
    mysql_select_db($this->config['dbase']) or die ('Unable to select database!'); 
    return; 
    } 
} 

просто еще один способ сделать это, убедитесь, что база данных правильно названа тоже.

Кроме того, если вы хотите использовать текущий файл config.php, вам нужно будет включить в метод, в котором вы используете переменные. Он не может использоваться извне этой области.

function connect() 
{ 
    include ('config.php'); 
    $connections = mysql_connect($server, $user,$password) or die ('Unabale to connect to the database'); 
    mysql_select_db($dbase) or die ('Unable to select database!'); 
    return; 
} 
0

попробовать это

config.ini 
[database] 
username = root 
password = 1 
dbname = users 
dsn = localhost 
...... 
class Database{ 
public $koneksi; 
    function __construct(){ 
    try{ 
     $config = parse_ini_file('config.ini'); 
     $this->koneksi = new PDO("mysql:host=" . $config['dsn'] . ";dbname=" . $config['dbname'], $config['username'],$config['password'],array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); 
     $this->koneksi->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
      }catch(PDOException $e){ 
     $e->getMessage(); 
    } 
    } 
} 
Смежные вопросы