MySQLi Prepare Statement и OOP PHP-запрос возвращает 0 строк - PullRequest
0 голосов
/ 06 февраля 2019

Пытаясь получить данные из MySQLi с помощью PHP OOP apporoach, я получаю No rows, хотя я уверен, что в базе данных есть строка совпадения

У меня есть класс с именем db, сохраненный в файле как db.inc.php и это похоже на

<?PHP
class db {
    private $DBSERVER;
    private $DBUSERNAME;
    private $DBPASSWORD;
    private $DBNAME;

    protected function connect(){
      $this->DBSERVER   = "localhost"; 
      $this->DBUSERNAME = "root"; 
      $this->DBPASSWORD = ""; 
      $this->DBNAME     = "maator"; 

      $conn = new mysqli($this->DBSERVER, $this->DBUSERNAME, $this->DBPASSWORD, $this->DBNAME);
      if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
      }     
      return $conn;
    }
}
?>

У меня есть расширенный класс с именем SetData в SetData.inc.php, например

<?PHP
include_once('db.inc.php'); 
class SetData extends db {
    private $page;
    private $region;
    private $conn;

    function __construct() {
       $this->conn = new db();
    }

   public function SetBox($vpage, $vregion){
        $this->page     = $vpage;
        $this->region = $vregion;
        $stmt = $this->conn->connect()->prepare("SELECT `title`,`description` FROM html WHERE `page` = ? AND `region` = ?");
        $stmt->bind_param("ss", $this->page, $this->region);    
        $stmt->execute();
        $stmt->store_result();
       if($stmt->num_rows === 0) exit('No rows');
        $stmt->bind_result($titlerow,$descriptionrow);
        $stmt->fetch();
            $title = $titlerow;
            $description = $descriptionrow;
        $stmt->free_result();
        $stmt->close();
    }
}
?>

и, наконец, на первой странице у меня есть

<?PHP
$page = 'game';
$region = 'ASIA';
include '../inc/SetData.inc.php';
$cls = new SetData();
$cls->SetBox($page, $region);

1 Ответ

0 голосов
/ 06 февраля 2019

Я не знаю, что такое dbconnect(), вам нужно вызвать ваш connect() метод здесь:

//$this->conn = new dbconnect(); // NO!

$this->conn = $this->connect();

Кроме того, вы не должны вызывать connect() здесь, у вас уже естьсоединение в $conn:

//$stmt = $this->conn->connect()->prepare("SELECT `title`,`description` FROM html WHERE `page` = ? AND `region` = ?"); // NO!

$stmt = $this->conn->prepare("SELECT `title`,`description` FROM html WHERE `page` = ? AND `region` = ?");

Тогда, что вы хотите сделать с $title и description?Может быть, вернуть их?

    $stmt->bind_result($titlerow, $descriptionrow);
    $stmt->fetch();
    $stmt->free_result();
    $stmt->close();

    return array('title' => $titlerow, 'description' => $descriptionrow);

Затем вызовите SetBox() и отобразите:

$result = $cls->SetBox($page, $region);
echo $result['title'];

Или установите свойства:

    $stmt->bind_result($titlerow, $descriptionrow);
    $stmt->fetch();

    $this->title = $titlerow;
    $this->description = $descriptionrow;

    $stmt->free_result();
    $stmt->close();

Затем вызовите SetBox() и отобразите:

$cls->SetBox($page, $region);
echo $cls->title;
...