2016-02-11 1 views
-1

Это работает, когда я жёстко значение постоянной:как использовать переменную DEFINE значение в PHP

define("SERVER","localhost"); 
define("USER","root"); 
define("PASSWORD","mypass"); 
define("DATABASE","my_db"); 
define("PORT","3306"); 

Но я должен получить значение из переменной, но это не работает:

define("SERVER",$host); 
define("USER",$username); 
define("PASSWORD",$password); 
define("DATABASE",$database); 
define("PORT","3306"); 


$conn = new connection(SERVER,USER,PASSWORD,DATABASE,PORT); 

Я искал в Интернете, даже в руководстве PHP не показан пример для константы с переменным значением. Для моего приложения я должен получить его от переменной, как , чтобы получить это право?

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

Warning: PDO::__construct(): php_network_getaddresses: getaddrinfo failed: No such host is known. in C:\wamp\www\ezy\class.dbconnect.php on line 33 

Полный код config.php

<?php 
session_start(); 
//read for config details 
$myFile = "details.txt"; 
$lines = file($myFile); 

$host = $lines[0];//localhost 
$username = $lines[1];//root 
$password = $lines[2];//mypass 
$org_name = $lines[3];//zealous 
$database = $lines[4];//zealous_db 

//include files starts 
include('class.dbconnect.php'); 
//include files ends 

//db credentials localhost 

define("SERVER",$host); 
define("USER",$username); 
define("PASSWORD",$password); 
define("DATABASE",$database); 
define("PORT","3306"); 

$conn = new connection(SERVER,USER,PASSWORD,DATABASE,PORT); 

?> 

класс dbconnect.php

<?php 
interface db 
{ 
    public function __construct($param,$param2,$param3,$param4,$param5); 
} 
abstract class connectionStatus 
{ 
    public function connectionStatus() 
    { 
     echo "Connection Established!"; 
    } 
} 
class connection extends connectionStatus implements db 
{ 
    public static $server; 
    public static $user; 
    public static $pass; 
    public static $dbname; 
    public static $port;  
    public static $pdo; 


    public function __construct($param,$param2,$param3,$param4,$param5) 
    { 
     self::$server = $param; 
     self::$user = $param2; 
     self::$pass = $param3; 
     self::$dbname = $param4; 
     self::$port = $param5; 

     try 
     { 
      self::$pdo = new PDO('mysql:host='.self::$server.'; dbname='.self::$dbname, self::$user, self::$pass); 
      self::$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     } catch(PDOException $e) 
     { 
      echo 'ERROR: ' . $e->getMessage(); 
     } 

     self::$pdo->query("use ".self::$dbname); 
     //$this->connectionStatus(); 

    } 
} 

?> 
+0

, если вы не присвоили ничего этим переменным, то в этом проблема. Теперь вы должны получать неопределенные переменные уведомления. –

+0

@ Fred-ii-, я сделал это, но не показывал в приведенном выше коде, и проверял их, чтобы их повторить, и они работают – 112233

+1

, вам нужно показать нам остальную часть кода подключения PDO и то, как они используются точно. Это догадки прямо сейчас. –

ответ

3

Зачем вам нужно, чтобы создать define почему не просто сделать

<?php 
session_start(); 

//read for config details 
$lines = file("details.txt"); 

include('class.dbconnect.php'); 

$conn = new connection(trim($lines[0]), 
         trim($lines[1]), 
         trim($lines[2]), 
         trim($lines[4]), 
         '3306' 
        ); 
?> 

Я не говорю, что его большой идеей, но в чем смысл создания DEFINE(), когда нет необходимости

Лично У меня возникло бы желание добавить все эти значения из файла в класс class.dbconnect.php как частные свойства. Сохранение их в текстовом файле в значительной степени напоминает сохранение их в файле .php. Не менее .php файлы автоматически защищаются веб-сервером, в котором файлы .txt отсутствуют, если вы не сделали что-то, чтобы защитить их

+0

Глупо, я согласен с вами, эти учетные данные, как предполагается, являются частными, я просто изучаю написание и чтение из txt-файла. Спасибо за ваш ответ. – 112233

+0

Приятное использование 'trim()' there Smokey. Не уверен, что файл OP содержит пробелы, но всегда лучше опередить игру ;-) –

+0

Спасибо Ральфу, я должен признать, что я немного позаимствовал вопрос о защите от вашего комментария. Я собирался что-то сказать в ответ, решил, что это может быть излишним, но когда я увидел, что вы прокомментировали мысль, я вернусь и добавлю. @ Fred-ii- – RiggsFolly