2013-08-20 36 views
0

我試圖建立一個mysqli_connect聲明$ dbc的數據庫連接一個數據庫連接。我曾在我的腳本工作有以下:設置使用變量從另一個文件

DEFINE ('DB_USER','myName'; 
DEFINE ('DB_PASSWORD','somePass123'; 
DEFINE ('DB_HOST','localhost'; 
DEFINE ('DB_NAME','sitename'; 


// make the db connection 
    $dbc = @mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME) 
    OR die ('Could not connect to mysql: ' . mysqli_connect_error()); 

然後我張貼的問題上SO有關安全性和最佳實踐,並告知,如果連接變量(密碼,主機,則dbname,用戶)在其他地方存在一個單獨的數據庫配置文件,我應該從那裏調用連接的變量。

下面是在配置/數據庫/ PHP的文件中的相關片段

$config['default'] = array(
    'benchmark' => TRUE, 
    'persistent' => FALSE, 
    'connection' => array(
     'type' => 'mysqli', 
     'user' => 'myName', 
     'pass' => 'somepass123', 
     'host' => 'localhost', 
     'port' => FALSE, 
     'socket' => FALSE, 
     'database' => 'sitename', 
    ), 
    'character_set' => 'utf8', 
    'table_prefix' => '', 
    'object' => TRUE, 
    'cache' => FALSE, 
    'escape' => TRUE 
); 

所以我再嘗試這樣做:

DEFINE ('DB_USER','$config['default']['connection']['user'])'; 
DEFINE ('DB_PASSWORD',$config['default']['connection']['pass']); 
DEFINE ('DB_HOST',$config['default']['connection']['host']); 
DEFINE ('DB_NAME',$config['default']['connection']['database']); 


// make the db connection 
    $dbc = @mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME) 
    OR die ('Could not connect to mysql: ' . mysqli_connect_error()); 

,當我試圖加載網頁,其中產生以下錯誤: 「未定義的變量:配置」

然後我嘗試這樣做:

$dbc = @mysqli_connect(
    $config['default']['connection']['host'], 
    $config['default']['connection']['user'], 
    $config['default']['connection']['pass'], 
    $config['default']['connection']['database']) 

    OR die ('Could not connect to mysql: ' . mysqli_connect_error()); 

// Set the encoding 
mysqli_set_charset($dbc, 'utf8'); 

// set the query variable 
$query = "SELECT MAX(rating_date) 
      AS last_date 
      FROM rating 
      WHERE incident_id = $incident_id;"; 

//connect and run the query 
$result = mysqli_query($dbc, $query); 

echo $result->fetch_object()->last_date; 

?> 

,然後將產生以下錯誤: 「致命錯誤:調用一個成員函數fetch_object()非物體上......」

我不是100%肯定這是什麼告訴我。昨天我才知道,一個人不能迴響在PHP直接在SQL查詢,因爲它是如此我切ñ粘貼的部分對象「回聲$ result-> fetch_object() - > LAST_DATE;」哪些工作。

看來,現在我想從配置於變量得出,而不是僅僅在函數定義它們,我無法連接可能是由於一個範圍的問題嗎?

與$ DBC連接的文件是在一個文件夾主題/ MYNAME /視圖/報告/ detail.php

與數據庫配置細節陣列的文件是在應用程序/配置/ database.php中

它看起來像一個變量範圍的問題?

什麼會在這裏是最好的做法,使我的$ DBC變量?當它位於與我調用它的文件不同的目錄中時,如何從database.php調用變量?我必須包含()整個文件嗎?

+1

是否包含配置文件中的變量? – Mathlight

+3

爲什麼要定義基於變量的常量?這就像在一輛馬拉的馬車中裝載馬匹一樣......如果要使用變量來存儲配置數據,那麼就直接使用這些變量。 –

+0

@Mathlight no。我應該(我很抱歉,如果這聽起來很愚蠢,你可以猜測我的PHP使用經驗) –

回答

1

怎麼樣東西理智喜歡:

$dbc = @mysqli_connect(
    $config['default']['connection']['host'], 
    $config['default']['connection']['user'], 
    $config['default']['connection']['pass'], 
    $config['default']['connection']['database']) 
OR die ('Could not connect to mysql: ' . mysqli_connect_error()); 

你不使用define(),你只是努力避免使您的用戶名和密碼的原始字符串到在mysqli_connect()調用獲得任何如果發生錯誤並且該行在錯誤消息/堆棧跟蹤中發送到客戶端。

+0

感謝您的答案,我剛剛編輯我的問題 –

-1

常量是全局的,你不需要將它們設置爲全球從記憶庫中檢索他們,但變量都沒有,如果你撥打的變量$config從函數內部有兩種方法來調用它:

  1. 設置變量是在你的功能,你是從global $config;

OR

    調用這個變量的第一個全球開始
  1. 呼叫使用$GLOBALS變量$config = $GLOBALS['config'];
相關問題