【问题标题】:Datatables 'Search' searches through all rows in mysql table, ignores where conditionDatatables 'Search' 搜索 mysql 表中的所有行,忽略 where 条件
【发布时间】:2014-11-17 07:09:28
【问题描述】:

我正在使用带有数据表的服务器端处理。 我的数据表从我的表中的视图中选择行

username ='$session'

$session 存储当前用户的用户名。 这可以正常工作并正确显示带有 $session 的所有行,但是当我尝试搜索时,它会显示我表中所有用户的结果。

我使用 ssp.class.php 中的 $where 变量来执行限制,它工作正常。

我的问题是如何将搜索限制为 sql 条件?

【问题讨论】:

  • 如何将搜索参数传递给服务器端代码?
  • 我没有将搜索参数传递给服务器端代码。它只是顶部的默认数据表搜索框
  • 如果不将它传递给服务器端代码,如何在SQL查询中使用它?

标签: jquery datatables jquery-datatables


【解决方案1】:

您不需要将参数传递给您的 php 脚本。 dataTables 将为您执行此操作,并将分页、排序和过滤信息发送到您的脚本。 (只需查看(萤火虫)控制台中的请求)。

在 ssp.class.php 中有一个名为 static function filter 的函数,它会为您生成一个 mysql WHERE 查询。

在这个函数的最后,where 子句返回return $where;

你想要做的是添加类似的东西:

$where.= ' and USER = '.$username.' ';

在您返回$where之前。

(注意空格以创建/连接有效查询!)

USER 应该是数据库中的字段,$username 是会话中的值。

如果两者都匹配,您的数据将被正确过滤。

我只能给你这个一般性的解释,因为我不知道你的数据库结构、会话中究竟存储了什么或者你使用的是什么版本的数据表。对于调试,将 $where 写入日志,您将看到发生了什么。

但这应该会给你一个关于如何进行的提示。

【讨论】:

  • 是的,我已将我的 SQL 条件连接到 $where 变量,并使用正确的数据填充表。现在,当我进行搜索时,它会返回超出我连接到 $where 变量的条件的行。这就是问题
  • 请告诉我你在哪里进行连接的代码和生成的字符串。其他一切都是猜测。
  • session_start(); if (isset($_SESSION['user'])) { //设置会话变量 $sessions= $_SESSION['user']; } $where = '用户名 = "'.$session.'"';
  • 叹息!您没有在此处连接到 $where 变量,而是在覆盖它。缺少连接点。在文件夹 examples/server_side/script 中的实际版本 1.10.4 中是 ssp.class.php 并且在第 190 行返回 $where。您应该在第 189 行添加额外的子句。然后将 $where 的内容打印到您的日志中,然后在您完成搜索后将这个变量的结果发送给我。
  • 是否覆盖它并不重要。这是我使用的唯一条件
【解决方案2】:

再次浏览流程,我意识到 WHERE 条件未附加到全局搜索部分。

我将条件添加到examples/server_side/scripts/ssp.class.php的第153行,它解决了问题。

$globalSearch[] = "`".$column['db']."` LIKE ".$binding." AND username = '$session'";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    • 2013-02-19
    • 2014-03-08
    • 1970-01-01
    相关资源
    最近更新 更多