2012-12-12 8 views
5

Ho un file chiamato config.php in cui sono stati definiti 4 costanti:Non è possibile utilizzare le costanti quando si cerca di connettersi al database in un altro file

<?php 

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

?> 

Quello che voglio fare è chiamare questo script con funzione request_once dentro l'altro file php chiamato database.php che utilizzerà la costante da questo file per il collegamento

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

ciò che ho restituito è che l'host, l'utente, la password e il database non sono definiti. Perché? Questo è un codice semplificato di esempio che ho usato per la connessione ma l'essenza del problema è qui. Grazie in anticipo.

+0

Hai provato a risuonare solo le variabili al fine di garantire lo script sia correttamente leggendo l'altro file? Potrebbe essere la strada sbagliata? Indovina. Btw, i comandi 'mysql' sono deprecati per ragioni di sicurezza a favore dei nuovi comandi' mysqli'. – War10ck

+0

Entrambi i file si trovano nella stessa directory e ho controllato circa una dozzina di volte se i nomi dei file sono scritti correttamente e così via:/ – DevGuy

+0

Se non sono definiti, c'è qualcosa che impedisce di includere 'config.php'. Controlla i nomi dei tuoi file e assicurati che non ci siano errori in 'config.php'. – MahanGM

risposta

1

PHP di default NON FARE SHOW Avvisi di costanti non definite. Quindi, se si utilizza una costante non definita, PHP potrebbe trattarla come una stringa. Ad esempio,

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

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

se si rimuove il commento sopra define() PHP stamperà foo invece e non alzerà un avviso.

Personalmente vorrei suggerire di fare prova di un po 'più in profondità:

0) Indica error_reporting(E_ALL) in config.php
1) Verificare se il file esiste ed è leggibile prima di includere questo
2) Verificare se le costanti sono in realtà definiti prima di utilizzarli

Infine, sarebbe come questo:

File: config.php

<?php 

error_reporting(E_ALL); 

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

File: 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 - Dovresti pubblicare un commento su come esattamente questa risposta ti ha aiutato a risolvere il tuo problema. Come è ora, questa domanda è di scarsa utilità per i futuri lettori di Stack Overflow. –

0

puoi provare Include() solo per vedere se fa la differenza. anche se si sta lavorando su un computer locale, si consiglia di utilizzare:

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

si dovrebbe guardare in MySQLi o PDO, come le funzioni di MySQL sono ammortizzati ora:

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