服务器端 Ajax JQuery CRUD DataTable - PHP PDO,MySql

Posted

技术标签:

【中文标题】服务器端 Ajax JQuery CRUD DataTable - PHP PDO,MySql【英文标题】:Server Side Ajax JQuery CRUD DataTable - PHP PDO, MySql 【发布时间】:2021-03-20 19:55:08 【问题描述】:

我正在尝试使用存储在子表中的 Id 从子表中获取数据,以填充 DataTable 并显示与父表和子表相关的记录。下面是代码:

问题是当我添加 WHERE 语句以根据 HolderID 获取记录时显示返回但未显示的条目数。并且过滤后也显示 0 代码:

function get_beneficaries_records($rowId)

    include('db.php');
    $statement = $connection->prepare("SELECT * FROM beneficiaries WHERE HolderID = $rowId");
    $statement->execute();
    $result = $statement->fetchAll();
    return $statement->rowCount();


Fetching records on fectchrecords.php.

$query .= "SELECT * FROM pro_beneficiaries";
if(isset($_POST["search"]["value"]))

    $query .= ' WHERE BeneficiaryIDNo LIKE "%'.$_POST["search"]["value"].'%" ';

    $query .= 'OR LastName LIKE "%'.$_POST["search"]["value"].'%" ';

    $query .= 'OR Initials LIKE "%'.$_POST["search"]["value"].'%" ';

if(isset($_POST["search"]["value"]))

    $query .= 'OR BeneficiaryIDNo LIKE "%'.$_POST["search"]["value"].'%" ';


if(isset($_POST["order"]))

    $query .= 'WHERE FK_HolderID = $rowIds';
    $query .= 'ORDER BY '.$_POST['order']['0']['column'].' '.$_POST['order']['0']['dir'].' ';
 
else

    $query .= 'ORDER BY BID DESC ';

if($_POST["length"] != -1)

    $query .= ' WHERE BeneficiaryID LIKE "%'.$_POST["search"]["value"].'%" ';


$statement = $connection->prepare($query);
$statement->execute();
$result = $statement->fetchAll();
$data = array();
$filtered_rows = $statement->rowCount();


foreach($result as $row)


    $sub_array = array();
    $sub_array[] = $row["Initials"];
    $sub_array[] = $row["LastName"];
    $sub_array[] = $row["BeneficiaryIDNo"];
    $sub_array[] = $row["Relationship"];
    $sub_array[] = $row["MemberType"];
    
    $sub_array[] = '<button type="button" name="update" id="'.$row["BID"].'" class="btn btn-outline-warning btn-xs updatebeneficiary"><i class="fa fa-pencil-alt"></i></button>';
    $sub_array[] = '<button type="button" name="delete" id="'.$row["BID"].'" class="btn btn-outline-danger btn-xs deletebeneficiary"><i class="fa fa-minus"></i></button>';
    $data[] = $sub_array;

$output = array(
    "draw"              =>  intval($_POST["draw"]),
    "recordsTotal"      =>  $filtered_rows,
    "recordsFiltered"   =>  get_beneficaries_records($rowId),
    "data"              =>  $data
);
echo json_encode($output);

【问题讨论】:

这似乎是一个关于 sql 查询而不是 ajax 的问题。 Concour @RayB 对于一个问题,您是否能够尽可能多地删除并且仍然能够复制问题。 @RayB 和 Anton Krug,问题仍然存在,我只需要获取数据并将其填充到数据表 WHERE HolderID = $rowId 但似乎不起作用 您已经在使用准备好的语句,为什么还要直接在查询中注入值。使用占位符并将变量用作执行函数中的有效负载 @Kevin 你有我如何实现它的例子吗? 【参考方案1】:

我会打印查询结果的原始内容,我会打印查询本身,以便查看生成的代码,然后我可以在单独的客户端中运行它(为此我喜欢 HeidiSQL)。

而且我认为可能会出现重复的 WHERE 条件

if(isset($_POST["order"]))

    $query .= 'WHERE FK_HolderID = $rowIds';
 

if($_POST["length"] != -1)

    $query .= ' WHERE BeneficiaryID LIKE "%'.$_POST["search"]["value"].'%" ';

我会将它组合成一个 WHERE 并使用布尔 AND OR 来形成我想要的条件

【讨论】:

Anton Krug,请告知我将如何实施此解决方案

以上是关于服务器端 Ajax JQuery CRUD DataTable - PHP PDO,MySql的主要内容,如果未能解决你的问题,请参考以下文章

使用Struts2和jQuery EasyUI实现简单CRUD系统(转载汇总)

JQuery+Ajax与服务器端进行交互

jQuery Grid With ASP.Net MVC

Jquery 或 Javascript mvc

使用 Jquery $.ajax 在 Flask 上调用服务器端函数 [重复]

如何在服务器端取消 ajax 查询(来自 jquery)?