2014-02-05 157 views
0

Goodday,Php mysqli数据库连接失败?

我收到一个奇怪的错误。

这是我的代码:

<?php 
$con=mysqli_connect("localhost","root","","testdatabase"); 

class database{ 
    public function select($tableName){ 
     $result = mysqli_query($con,"SELECT * FROM ".$tableName);  
    }  
} 

$database = new database(); 
?> 

错误消息是,$ con是一个不确定的变量。但是我在第2行定义了$ con?

当我var_dump控制它也说NULL。

我到底做错了什么?

+1

您不能在类中使用全局变量。 –

回答

3

如果你想访问的方法或函数的$骗子变种,你必须是全球化代码内:

public function select($tableName){ 
    global $con; 
    $result = mysqli_query($con,"SELECT * FROM ".$tableName);  
} 

但你不应该这样做,是全局邪恶 !

这是你的代码应该是这样:

<?php 
class database{ 
    protected $con; 

    public function __construct($host, $user, $password, $dbname){ 
     $this->con = mysqli_connect($host, $user, $password, $dbname); 
    } 

    public function select($tableName){ 
     $result = mysqli_query($this->con,"SELECT * FROM ".$tableName);  
    }  
} 

$database = new database("localhost", "root", "", "testdatabase"); 
?> 
+0

通过您的整个应用程序使用单个连接而无需共享将会超级,超级慢。 – tadman

+0

PHP中没有连接池。 –

+0

PHP乞讨不同:[mysqli中的持久连接](http://www.php.net/manual/en/mysqli.persistconns.php)。 – tadman

1

连接$con在全局范围内可用。你可能想要做的是在数据库对象的构造函数中注入你的mysql连接(以mysqli对象的形式)。下面是一个简单的例子:

<?php 
$mysqli= new mysqli("localhost","root","","testdatabase"); 

class database{ 
    protected $mysqli = null; 
    public function __contruct(MySQLI $mysqli = NULL) { 
     $this->mysqli = $mysqli; 
    } 

    public function select($tableName){ 
     $result = $this->mysqli->query("SELECT * FROM ".$tableName);  
    }  
} 

$database = new database($mysqli); 
?> 

注意,因为你试图去用面向对象的范例,你还不如用mysqli的面向对象的方式。

+0

对我来说,在构造函数中声明连接而不是创建依赖关系更有意义。 –

+0

@kasperTaeymans依赖注入更加灵活。这样你就不会将你的类与任何特定的DB连接逻辑联系起来。你可以传递你的系统可能实例化的任何mysqli对象,并将它传递给这个类。 –

0

为您的类添加一个构造函数并在此函数内声明您的连接。

class database{ 
    private $con; 
    public function __construct(){ 
     $this->con=mysqli_connect("localhost","root","","testdatabase"); 
    } 
    public function select($tableName){ 
     $result = mysqli_query($this->con,"SELECT * FROM ".$tableName);  
    }  
} 

$database = new database(); 
1

你不能使用类中的全局变量。

<?php 

    class database { 

     private $con; 
     public $result; 

     public function select($tableName){ 
      $this->con = mysqli_connect("localhost","root","","testdatabase"); 
      $this->result = mysqli_query($this->con,"SELECT * FROM ".$tableName);  
     }  
    } 

    $database = new database(); 

    // do something with result 
    if($database->result) { 
     echo "Query returned something!"; 
    } 
?>