Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中通过OOP连接到DB和Activites_Php_Oop_Mysqli_This - Fatal编程技术网

在PHP中通过OOP连接到DB和Activites

在PHP中通过OOP连接到DB和Activites,php,oop,mysqli,this,Php,Oop,Mysqli,This,嗨,我在使用OO PHP连接数据库时遇到了一些问题。我的剧本在下面。我做这件事已经有一段时间了。这只是一个测试脚本,因为我对OOP还比较陌生。请不要太苛刻 class Database{ public $mysqli, $host, $username, $password, $db; public function __construct($host, $username, $password, $db

嗨,我在使用OO PHP连接数据库时遇到了一些问题。我的剧本在下面。我做这件事已经有一段时间了。这只是一个测试脚本,因为我对OOP还比较陌生。请不要太苛刻

class Database{

    public $mysqli,
         $host,
         $username,
         $password,
         $db;

    public function __construct($host, $username, $password, $db){

      $this->host = $host;
      $this->username = $username;
      $this->password = $password;
      $this->db = $db;

     $mysqli = new mysqli($host, $username, $password, $db);
        if (!$mysqli){
            echo "error in connecting to database";
        }
        else{
            echo "success in connecting to database";
        }
    }   

    public function query(){
        $result = $mysqli->query("SELECT * FROM inventory");
        if ($result) {
            printf("Select returned %d rows.\n", $result->num_rows);

            $result->close();
        }
        else{
            echo "there is an error in query";
            $result->close();
        }
        //echo "in query function";
    }
}
用法

$DB = new Database('localhost', 'root', 'xxxx', 'yyyy');
$DB -> query();  

您的主要问题是没有将值存储到类“
$mysqli
属性中。您需要在构造函数和查询方法中使用
$this->mysqli
,而不是
$mysqli

其次,这个类添加了mysqli类没有的内容。你不妨简单地使用

$DB = new mysqli('localhost', 'root', 'xxxx', 'yyyy');

if ($DB->connect_error) {
    throw new Exception($DB->connect_error, $DB->connect_errno);
}
试试这个:

$connection = mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME);

// Test if connection succeeded
if(mysqli_connect_error()){
    die("Database connection failed: " .
        mysqli_connect_error() .
        " (" . mysqli_connect_errno() . ")"
    );
}

问题是,您访问类属性时没有
$this
$mysqli
应该在构造函数中的
$this->mysqli

您正在使用mysqli属性作为
mysqli
类的对象

然后,您可以通过查询功能中的
$this->mysqli->query(“从库存中选择*”)
使用mysqli属性对象的查询功能(在数据库类中)

更新代码:

<?php
class Database{

    public $mysqli,
         $host,
         $username,
         $password,
         $db;

public function __construct($host, $username, $password, $db){

  $this->host = $host;
  $this->username = $username;
  $this->password = $password;
  $this->db = $db;

 $this->mysqli = new mysqli($host, $username, $password, $db);

    /* check connection */
    if ($this->mysqli->connect_errno) {
       printf("Connect failed: %s\n", $this->mysqli->connect_error);
       exit();
    } else {
       echo "success in connecting to database";
    }
}   

public function query(){
    $result = $this->mysqli->query("SELECT * FROM inventory");
    if ($result) {
        printf("Select returned %d rows.\n", $result->num_rows);

        $result->close();
    }
    else{
        echo "there is an error in query";
        $result->close();
    }
    //echo "in query function";
}
}

$DB = new Database('localhost', 'root', 'xxxx', 'yyyy');
$DB -> query();  

这不是程序性的吗?如果你“有一些问题”,你需要在你的问题中添加所有可用的信息。描述问题和症状,否则很难诊断。pdo或mysqli>@user2128444哪个更好完全是主观的。我认为PDO有一个更干净的API,但是有一些MySQL功能只能通过MySQLi使用,因此您可以根据使用连接的方式进行选择。失败的
MySQLi
构造函数不会计算为错误的值。您需要检查
mysqli::$connect\u error
/
mysqli::$connect\u errno