2013-08-20 4 views
0

Я пытаюсь настроить соединение db для инструкции mysqli_connect $ dbc. Я это работает в моем сценарии со следующим:Настройка соединения db с использованием переменных из другого файла

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 о безопасности и наилучшей практике и был сообщено, что если переменные подключения (пароль, хост, имя_бд, пользователи) существует в других странах отдельный файл конфигурации базы данных, который я должен назвать переменными для подключения оттуда.

Вот соответствующий отрывок из файла в конфигурации/базы данных/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% уверен, что это говорит мне , Вчера я узнал, что не удается выполнить эхо SQL-запрос в php напрямую, потому что это объект, поэтому я разрезал n, вставил часть «echo $ result-> fetch_object() -> last_date;» который работал.

Кажется, что теперь, когда я пытаюсь использовать переменные из config, а не просто определять их в функции, я не могу подключиться, возможно, из-за проблемы с областью?

Файл с соединением $ DBC находится в папке/темами MyName/Views/отчеты/detail.php

Файл с детальной конфигурации массива базы данных в приложении/Config/database.php

Похоже, проблема с переменной областью?

Что было бы лучшей практикой при создании переменной $ dbc? Как вызвать переменные из базы данных.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;

ИЛИ

  1. Вызвать переменную, используя переменную $GLOBALS$config = $GLOBALS['config'];