2014-07-22 130 views
0

我正在制作一个新脚本,目前正在构建数据库类。我创建了一个检查用户IP地址的函数。当我去测试它时,我留下了一个空白页面,而不是die('It Worked');我的功能有什么问题?

我不喜欢发布代码的负载,但如果我发布我的类到目前为止更有意义。

class.Database.inc

<?php 
     require_once('config.php'); // Configuration file 

    /** 
    * MySQLi database; only one connection is allowed. 
    */ 
    class Database { 
    // Database credentials from config file 
     private $_DATABASE_SERVER = DB_SERVER; 
     private $_DATABASE_USER = DB_USER; 
     private $_DATABASE_PASS = DB_PASS; 
     private $_DATABASE_NAME = DB_NAME; 

     private $_connection; 
     // Store the single instance. 
     private static $_instance; 

     /** 
     * Get an instance of the Database. 
     * @return Database 
     */ 
     public static function getInstance() { 
     if (!self::$_instance) { 
      self::$_instance = new self(); 
     } 
     return self::$_instance; 
     } 

     /** 
     * Constructor. 
     * Database connection (server, user, password, name) 
     */ 
     public function __construct() { 
     $this->_connection = new mysqli($this->_DATABASE_SERVER, $this->_DATABASE_USER, $this->_DATABASE_PASS, $this->_DATABASE_NAME); 
     // Error handling. 
     if (mysqli_connect_error()) { 
      trigger_error('Failed to connect to MySQL: ' . mysqli_connect_error(), E_USER_ERROR); 
     } 
     } 

     /** 
     * Empty clone magic method to prevent duplication. 
     */ 
     private function __clone() {} 

     /** 
     * Get the mysqli connection. 
     */ 
     public function getConnection() { 
     return $this->_connection; 
     } 

    /** 
    * DATABASE IP CHECK FUNCTION 
    */ 
     public function checkIp($user_ip) { 
      $db = self::getInstance(); 
      $mysqli = $db->getConnection(); 

      $sql_query = "SELECT ip FROM "; 
      $sql_query .= "ip_address WHERE "; 
      $sql_query .= "ip = '$user_ip'"; 

      $result = $mysqli->query($sql_query) or die(mysqli_error($mysqli)); 
      if ($row = $result->fetch_assoc()) { 
       die('It Worked!'); 
      } 
     } 
    } 
    ?> 

问题是与位于朝向该文件的底部,checkIp();函数的函数。

我已经创建了包含这些内容的test.php文件。

<?php 
require_once('class.Database.inc.php'); 

Database->checkIp('1'); 
?> 

我不知道我是否试图错误地访问该函数或者它是否是别的东西。值1在数据库中,以防有人想知道。

+0

阅读错误日志。 –

+0

单身。不要那样做,只是...不要。 PS:类不会'死',很少'trigger_error',它们会抛出异常# –

+0

@MartinBean在error_log中没有任何内容 –

回答

1

我会避免单身人士,并创建一个Database对象,当你需要一个。而不是Database->checkIp('1')你应该使用Database的实例,而不是像这样调用更静态的函数。此外,您的checkIp函数应该仅通过$this访问getConnection函数,因为您已经在类内部并且不需要创建新实例。

您可能希望确保错误报告上,这样它更容易发现问题:

error_reporting(E_ALL);

ini_set('display_errors', 1);

<?php 
    require_once('config.php'); // Configuration file 

/** 
* MySQLi database; only one connection is allowed. 
*/ 
class Database { 
// Database credentials from config file 
    private $_DATABASE_SERVER = DB_SERVER; 
    private $_DATABASE_USER = DB_USER; 
    private $_DATABASE_PASS = DB_PASS; 
    private $_DATABASE_NAME = DB_NAME; 

    private $_connection; 

    /** 
    * Constructor. 
    * Database connection (server, user, password, name) 
    */ 
    public function __construct() { 
    $this->_connection = new mysqli($this->_DATABASE_SERVER, $this->_DATABASE_USER, $this->_DATABASE_PASS, $this->_DATABASE_NAME); 
    // Error handling. 
    if (mysqli_connect_error()) { 
     trigger_error('Failed to connect to MySQL: ' . mysqli_connect_error(), E_USER_ERROR); 
    } 
    } 

    /** 
    * Get the mysqli connection. 
    */ 
    public function getConnection() { 
    return $this->_connection; 
    } 

/** 
* DATABASE IP CHECK FUNCTION 
*/ 
    public function checkIp($user_ip) { 
     $mysqli = $this->getConnection(); 

     $sql_query = "SELECT ip FROM "; 
     $sql_query .= "ip_address WHERE "; 
     $sql_query .= "ip = '$user_ip'"; 

     $result = $mysqli->query($sql_query) or die(mysqli_error($mysqli)); 
     if ($row = $result->fetch_assoc()) { 
      die('It Worked!'); 
     } 
    } 
} 
?> 

用法:

<?php 
    require_once('class.Database.inc.php'); 
    $database = new Database(); 
    $database->checkIp('1'); 
?> 
+0

工作,谢谢。 –