загрузить config.php с помощью класса - PullRequest
3 голосов
/ 28 февраля 2012

Я хочу загрузить файл конфигурации в классе. Вот содержимое 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, мне просто нужно выполнить код идеально

Ответы [ 6 ]

12 голосов
/ 28 февраля 2012

Почему бы не использовать файл .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;
 }
5 голосов
/ 28 февраля 2012

Прочтите область видимости переменной в руководстве по PHP .

Вы включили файл до объявления класса в глобальной области видимости, недоступной для области действия метода класса.Если вы хотите использовать эти переменные внутри методов класса, вам нужно либо получить к ним глобальный доступ с помощью $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);
  }
}
2 голосов
/ 28 февраля 2012

использовать определенные переменные в вашей конфигурации.

http://php.net/manual/en/function.define.php

1 голос
/ 28 февраля 2012

может сделать это следующим образом. Проблема в вашем коде должна заключаться в том, что переменная, которую вы объявляете в 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());
        }
    }
}
1 голос
/ 28 февраля 2012

Попробуйте это

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 голосов
/ 13 февраля 2018

попробуйте

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();
    }
  }
}
...