看似错误的数据库访问和未捕获的错误:调用成员函数prepare()时为null

问题描述 投票:0回答:1

我可以轻松地检测到我的代码中存在的问题,但是找不到解决方法。我发现我可能未正确包含数据库表。想法是将Datatables与该AJAX url一起使用,以便可以进行分页,搜索和排序。

这是我的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());
    }
}
}
php jquery ajax datatables
1个回答
0
投票

您尝试使用其所属类之外的$conn访问PDO实例($this)。在Database类的方法中,可以用$this引用当前实例,但不能在外部引用。

您需要实际创建数据库类的实例,然后访问其$conn

© www.soinside.com 2019 - 2024. All rights reserved.