【问题标题】:Undefined variable when connecting to a database连接到数据库时未定义的变量
【发布时间】:2015-03-10 13:53:53
【问题描述】:

当我尝试调用connect() 方法时,我不知道为什么userhostpassword 变量未定义

    $app->get('/get', function () use($app){
        $db = new Db_handler;
        $db->connect();
    }
);

这是Db_handler 类本身

    <?php
        class Db_handler{
                private $driver;
                private $host;
                private $port;
                private $schema;
                private $username;
                private $password;

                function Db_handler( $config_file = 'connection.ini' ){
                        if(!$connection_data = parse_ini_file($config_file, true)) throw new exception("No se puedo abrr el fichero de configuracion ".$config_file." .");
                        $driver = $connection_data["database"]["driver"];
                        $host = $connection_data["database"]["host"];
                        $port = $connection_data["database"]["port"];
                        $schema = $connection_data["database"]["schema"];
                        $username = $connection_data["database"]["username"];
                        $password = $connection_data["database"]["password"];

                        echo $host;
                        echo $username;
                        echo $password;
                }

                function connect(){
                        $link = mysql_connect($host, $username, $root)
                        or die('No se pudo conectar: ' . mysql_error());
                }

        }
?>

构造函数的回显正确显示了变量。

【问题讨论】:

    标签: php oop constructor


    【解决方案1】:

    在您的构造函数和 connect() 方法中,使用 $this 为每个 var 名称添加前缀。

    $this->driver = ...
    $this->host   = ...
    

    等等

    【讨论】:

      【解决方案2】:

      编辑您的连接功能。更改此行:

      $link = mysql_connect($host, $username, $root)
      

      到这里:

      $link = mysql_connect($this->host, $this->username, $this->password)
      

      函数 connect 中使用的变量是未初始化的局部变量。当您将关键字 $this 与指针 -> 一起使用时,您将调用已在构造函数中定义的类变量。因此,在构造函数中设置类私有变量也很重要:

      $this->driver = $connection_data["database"]["driver"];
      $this->host = $connection_data["database"]["host"];
      $this->port = $connection_data["database"]["port"];
      $this->schema = $connection_data["database"]["schema"];
      $this->username = $connection_data["database"]["username"];
      $this->password = $connection_data["database"]["password"];
      

      【讨论】:

        【解决方案3】:

        我认为未定义变量只是$root。 您拨打mysql_connect($host, $username, $root) 并且 $root 没有在任何地方声明。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-01-03
          • 1970-01-01
          • 2013-10-27
          • 2018-05-02
          • 2018-11-19
          • 1970-01-01
          • 2015-10-13
          相关资源
          最近更新 更多