2012-12-12 30 views
5

Tôi có một tập tin gọi là config.php trong đó tôi định nghĩa 4 hằng:Không thể sử dụng các hằng số khi cố gắng kết nối với cơ sở dữ liệu trong file khác

<?php 

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

?> 

Những gì tôi muốn làm là gọi kịch bản này với chức năng request_once bên trong file php khác gọi database.php mà sẽ sử dụng liên tục từ tập tin này để kết nối

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

những gì tôi có được trả lại là các máy chủ, người dùng, mật khẩu và cơ sở dữ liệu không được định nghĩa. Tại sao vậy? Đây là một mẫu đơn giản hóa mã tôi được sử dụng để kết nối nhưng bản chất của vấn đề là ở đây. Cảm ơn bạn trước.

+0

Các bạn đã cố gắng chỉ echo biến để đảm bảo kịch bản của bạn là đúng cách đọc các tập tin khác? Nó có thể là con đường sai? Chỉ cần đoán thôi. Lệnh Bts, 'mysql' không được dùng vì lý do bảo mật có lợi cho lệnh' mysqli' mới. – War10ck

+0

Cả hai tập tin nằm trong cùng một thư mục và tôi đã kiểm tra khoảng chục lần nếu tên tệp được viết đúng chính tả và như sau:/ – DevGuy

+0

Nếu chúng không được xác định thì có điều gì đó ngăn không cho 'config.php' được đưa vào. Kiểm tra tên tệp của bạn và đảm bảo không có lỗi trong 'config.php'. – MahanGM

Trả lời

1

PHP theo mặc định KHÔNG HIỂN THỊ Thông báo về các hằng số không xác định. Vì vậy, nếu bạn sử dụng một hằng số không xác định, PHP sẽ đơn giản coi nó là một chuỗi. Ví dụ,

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

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

nếu bạn bỏ ghi chú trên define() PHP sẽ in foo thay vào đó và sẽ không tăng một thông báo.

Cá nhân tôi sẽ đề nghị bạn thực hiện kiểm tra sâu hơn một chút:

0) Khai báo error_reporting(E_ALL) trong config.php
1) Kiểm tra xem tập tin tồn tại và nó có thể đọc được trước khi bạn bao gồm này
2) Kiểm tra xem các hằng số đang thực sự xác định trước khi bạn sử dụng chúng

Cuối cùng, Nó sẽ như thế này:

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 - Bạn nên đăng nhận xét về chính xác câu trả lời này đã giúp bạn khắc phục vấn đề của mình như thế nào. Như bây giờ, câu hỏi này là ít sử dụng cho người đọc Stack Overflow trong tương lai. –

0

bạn có thể thử Bao gồm() chỉ để xem nó có tạo sự khác biệt hay không. còn nếu bạn đang làm việc trên một máy tính cục bộ, bạn có thể muốn sử dụng:

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

Bạn nên nhìn vào mysqli hay PDO như các chức năng mysql được khấu hao bây giờ:

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(); 
     } 
Các vấn đề liên quan