2012-12-12 16 views
5

Mam plik o nazwie config.php w którym zdefiniowany 4 stałe:Nie można używać stałych, gdy próbuje połączyć się z bazą danych w innym pliku

<?php 

define('HOST','localhost'); 
define('USER','root'); 
define('PASSWORD',''); 
define('DATABASE','some_database'); 

?> 

Co chcę zrobić, to zadzwonić z tego skryptu funkcja request_once wewnątrz innego pliku php nazywane database.php który użyje stała z tego pliku do podłączenia

<?php 
    require_once('config.php'); 
    $connect = mysql_connect(HOST,USER,PASSWORD); 
    $select_db = mysql_select_db(DATABASE); 
?> 

co otrzymuję zwracane jest to, że gospodarz, użytkownika, hasło i bazy danych nie są zdefiniowane. Dlaczego? To jest uproszczony przykładowy kod używany do połączenia, ale istotą problemu jest tutaj. Z góry dziękuję.

+0

Czy chciał tylko echo zmienne, aby zapewnić skrypt został poprawnie czyta inny plik? Czy to może być zła ścieżka? Po prostu zgadnij. Btw, komendy 'mysql' są przestarzałe ze względów bezpieczeństwa na rzecz nowych komend' mysqli'. – War10ck

+0

Oba pliki leżą w tym samym katalogu i sprawdziłem kilkanaście razy, czy nazwy plików są poprawne i tak dalej:/ – DevGuy

+0

Jeśli nie są zdefiniowane, to jest coś, co uniemożliwia włączenie 'config.php'. Sprawdź nazwy plików i upewnij się, że nie ma błędu w 'config.php'. – MahanGM

Odpowiedz

1

PHP domyślnie NIE POKAŻ Zawiadomienia o niezdefiniowanych stałych. Więc jeśli użyjesz nieokreślonego stałego PHP, potraktuj to jako ciąg. Na przykład,

<?php 
//define('__TEST__', 'foo'); 

print __TEST__; //Will print __TEST__ and raise E_NOTICE if it's enabled 

jeśli odkomentowaniu powyżej define() PHP wypisze foo zamiast i nie podniesie zawiadomienie.

Osobiście proponuję, aby nieco głębsze Test:

0) Stwierdzenie error_reporting(E_ALL) w config.php
1) Sprawdź, czy plik istnieje i jest czytelny zanim to ten
2) Sprawdź, czy stałych są właściwie zdefiniowane przed ich użyciem

Wreszcie, byłoby to tak:

Plik: config.php

<?php 

error_reporting(E_ALL); 

define('HOST','localhost'); 
define('USER','root'); 
define('PASSWORD',''); 
define('DATABASE','some_database'); 

Plik: dbconnection.php

<?php 

//require() will produce FATAL error if inclusion fails, so we're OK 
require_once('config.php'); 


if (defined('HOST') && defined('USER') && defined('PASSWORD') && defined('DATABASE')){ 

$connect = mysql_connect(HOST,USER,PASSWORD); 
$select_db = mysql_select_db(DATABASE); 

} else { 

    trigger_error('Some constants are missing', E_USER_ERROR); 
} 
+0

@devguy - Należy opublikować komentarz dotyczący tego, w jaki sposób ta odpowiedź pomogła rozwiązać problem. Tak jak obecnie, to pytanie jest mało przydatne dla przyszłych czytników Stack Overflow. –

0

można spróbować Include() tylko, aby sprawdzić, czy to robi różnicę. również w przypadku pracy na lokalnym komputerze, można użyć:

require_once(dirname(__FILE__) . "/config.php"); 

Należy zajrzeć do mysqli lub PDO jako funkcji mysql amortyzowane są teraz:

define("DB_HOST", ""); 
define("DB_USERNAME", ""); 
define("DB_PASSWORD", ""); 
define("DB_NAME", ""); 

    $Mysqli = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME); 
     if ($Mysqli->connect_errno) 
     { 
      echo "Failed to connect to MySQL: (" . $Mysqli->connect_errno . ") " . $Mysqli->connect_error; 
      $Mysqli->close(); 
     } 
Powiązane problemy