На первый взгляд неправильный доступ к базе данных и неперехваченная ошибка - PullRequest
0 голосов
/ 07 октября 2019

Я легко могу обнаружить проблему, которая есть в моем коде, но не могу найти способ ее решить. Я вижу, что я, вероятно, неправильно включаю таблицу базы данных. Идея состояла в том, чтобы использовать Datatables с этим URL-адресом AJAX, чтобы я мог выполнять нумерацию страниц, поиск и сортировку.

Вот мой AJAX-файл

<?php
include '../../DAL/Database.php';
## Read value
}
$draw = $_POST['draw'];
$row = $_POST['start'];
$rowperpage = $_POST['length']; // Rows display per page
$columnIndex = $_POST['order'][0]['column']; // Column index
$columnName = $_POST['columns'][$columnIndex]['data']; // Column name
$columnSortOrder = $_POST['order'][0]['dir']; // asc or desc
$searchValue = $_POST['search']['value']; // Search value

$searchArray = array();

## Search 
$searchQuery = " ";
if($searchValue != ''){
   $searchQuery = " AND (naziv LIKE :naziv OR opis LIKE :opis OR naziv_radnog_mesta LIKE :naziv_radnog_mesta ) ";
 $searchArray = array( 
        'naziv'=>"%$searchValue%", 
        'opis'=>"%$searchValue%",
        'naziv_radnog_mesta'=>"%$searchValue%"
   );
 }

## Total number of records without filtering
$stmt = $this->conn->prepare("SELECT COUNT(*) AS allcount FROM taskovi");
$stmt->execute();
$records = $stmt->fetch();
$totalRecords. = $records['allcount'];

## Total number of records with filtering
$stmt = $this->conn->prepare("SELECT COUNT(*) AS allcount FROM taskovi WHERE 1 ".$searchQuery);
$stmt->execute($searchArray);
$records = $stmt->fetch();
$totalRecordwithFilter = $records['allcount'];

## Fetch records
$stmt = $conn->prepare("SELECT * FROM taskovi WHERE 1 ".$searchQuery." ORDER BY ".$columnName." ".$columnSortOrder." LIMIT :limit,:offset");

// Bind values
foreach($searchArray as $key=>$search){
  $stmt->bindValue(':'.$key, $search,PDO::PARAM_STR);
}

$stmt->bindValue(':limit', (int)$row, PDO::PARAM_INT);
$stmt->bindValue(':offset', (int)$rowperpage, PDO::PARAM_INT);
$stmt->execute();
$empRecords = $stmt->fetchAll();

$data = array();

foreach($empRecords as $row){
   $data[] = array(
      "naziv"=>$row['naziv'],
      "opis"=>$row['opis'],
      "naziv_radnog_mesta"=>$row['naziv_radnog_mesta'],
      "id_task"=>$row['id_task'],
      "id_radno_mesto"=>$row['id_radno_mesto'],
   );
  }

## Response
$response = array(
   "draw" => intval($draw),
   "iTotalRecords" => $totalRecords,
   "iTotalDisplayRecords" => $totalRecordwithFilter,
   "aaData" => $data
);
echo ($response);

echo json_encode($response);

И код моей базы данных

<?php 

class Database
{
private $hostname = 'localhost';
private $username = 'root';
private $password = '';
private $db = 'business';

private $conn = null;
public function getConnection()
{
    if (null === $this->conn) {
        $this->dbConnect();
    }
    #echo "Connection successfull";
    return $this->conn;
}

/**
 * Establish database connection.
 */
private function dbConnect()
{
    try {
        $this->conn = new PDO("mysql:host=" . $this->hostname . ";dbname=" . $this->db,
            $this->username, $this->password);
        $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch (PDOException $e) {
        die('Connect error ' . $e->getMessage());
    }
}
}

1 Ответ

0 голосов
/ 07 октября 2019

Вы пытаетесь получить доступ к экземпляру PDO ($conn) с помощью $this вне класса, к которому он принадлежит. В методе класса Database вы можете ссылаться на текущий экземпляр с $this, но не снаружи.

Вам необходимо создать экземпляр вашего класса Database, а затем получить доступ к его $conn. * 1007. *

После вашего include '../../DAL/Database.php';:

$db = new Database;
$conn = $db->conn;

Теперь вы можете использовать $conn вместо $this->conn.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...