mysqli db连接类无法正常工作

时间:2014-07-12 14:32:57

标签: php mysql mysqli

亲爱的所有我正在尝试创建mysqli db连接类,这是我写的第一个php类,我不知道我在哪里做错了,请有人请指正。

这是我的

         <?php
                 class Database
                 {

                     private static $m_pInstance; private $link;

                     private $db_host ='localhost';
                     private $db_user = 'root';
                     private $db_pass = 'rootpass';
                     private $db_name = 'mydb';


                     private function __construct() 
                     {
                       $this->link = new mysqli_connect($this->db_host,$this->db_user,$this->db_pass,$this->db_name);
                       return $this->link;
                     }


                     public static function getInstance()
                     {
                         if (!self::$m_pInstance)
                         {
                             self::$m_pInstance = new Database();
                         }
                         return self::$m_pInstance;
                     }

               // here I would like to switch db
                public function mydb($query)
                {
                $this->link->mysqli_select_db($query);
                }

              // Here I want to run my raw query...
                     public function query($query)
                     {
                        return $this->link->mysqli_query($query);
                     }

                  }

         ?>

我想像这样开始查询

  $first_class = Database::getInstance();

  $result = $first_class -> query("select * from mytable");

请有人纠正我..请发表评论我想了解控制流程......真的说我对$x = $this->somefun($sql)非常不舒服

1 个答案:

答案 0 :(得分:2)

您正在使用过程实例化方法而不是OO方法来创建连接。请记住,当您创建某个对象(使用new关键字)时,会在该类上调用magic __construct方法。见here

所以而不是

$this->link = new mysqli_connect($this->db_host,$this->db_user,$this->db_pass,$this->db_name);

您需要使用

$this->link = new mysqli($this->db_host,$this->db_user,$this->db_pass,$this->db_name);

此外,由于您在创建连接时选择了数据库,因此此方法可能是必需的。

// here I would like to switch db
public function mydb($query)
{
    $this->link->mysqli_select_db($query);
}

电子 浏览文档并学习各种mysqli方法的OO表示,并使用它代替过程函数,这将解决您的许多问题。

顺便使用单例对象的好工作。有些人可能会强烈反对我,但我认为对于数据库连接管理来说这是一个很好的方法。另一种方法是PDO连接缓存,但对于像这样基本的东西,单例就可以了。

如果您收到任何其他错误,请发表评论。