从类中查询MySQL数据库(query mysql database from inside a c

2019-08-01 16:57发布

我想从一个类中运行一个查询到MySQL数据库和它不工作的某些原因。 我有在我链接到同一个单独的文件中的类require_once()函数。

这里是主要的PHP文件看起来像:

<?php
  require_once("connect.php");
  require_once("theClass.php");

  $a = new theClass;
  $a->runQuery();
}

connect.php:

<?php
//connect to mySQL database
$mysqli = new mysqli("host", "user", "password", "db");
if ($mysqli->connect_errno)
{
    echo "<br><h1>Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error . "</h1><br>";
}

theClass.php:

<?php
require_once('connect.php');

class theClass
{
  //class variables and other functions here

  function runQuery()
  {
    $query = "SELECT col_1 FROM db.table";
    $stmt = $mysqli->prepare($query);
    stmt->execute();
    $stmt->bind_result($r);

    while($stmt->fetch())
    {
      echo $r . "<br>";
    }
  }
};

我试图复制类到主PHP文件,它仍然无法正常工作; 不过,我已经使用了完全相同的代码(查询,编制,执行,bind_result,并获取部分)在外部PHP文件,以及主要的PHP文件内,它一直两次。 这使我相信,您无法运行查询从一个类的内部,或出现的持续有关这样一种不同的方式。 任何人都可以点我在正确的方向?

谢谢

Answer 1:

它传递到方法本身

你必须对数据库对象传递给方法,因为它们不是在同一个范围:

function runQuery($mysqli)

并调用它像

$a = new theClass;
$a->runQuery($mysqli);

它传递给构造函数

如果你的类使得很多的数据库调用,你可以简单地通过它在构造函数中,并将其保存为以后使用私有变量:

class theClass
{
  private $mysqli;

  function __construct($mysqli) {
    $this->mysqli = $mysqli;
  }

  function runQuery()
  {
    $query = "SELECT col_1 FROM db.table";
    $stmt = $this->mysqli->prepare($query);
    stmt->execute();
    $stmt->bind_result($r);

    while($stmt->fetch())
    {
      echo $r . "<br>";
    }
  }
};

并调用它像

$a = new theClass($mysqli);
$a->runQuery();

两种方法都清楚地表明你的类的依赖性是一个mysqli的对象,这有利于日后的维护和可读性。



Answer 2:

你需要为pass $ mysqli的作为参数或使用全局$库MySQLi

<?php
require_once('connect.php');

class theClass
{
  //class variables and other functions here

  function runQuery()
  {
    global $mysqli;
    $query = "SELECT col_1 FROM db.table";
    $stmt = $mysqli->prepare($query);
    stmt->execute();
    $stmt->bind_result($r);

    while($stmt->fetch())
    {
      echo $r . "<br>";
    }
  }
};


文章来源: query mysql database from inside a class