【问题标题】:Mysql query for only current user仅针对当前用户的 Mysql 查询
【发布时间】:2015-06-25 03:03:37
【问题描述】:

我已经开始使用 wpdatatables 插件, 在后端它有一个地方可以输入一个 MySql 查询来创建一个表。

我有:

SELECT id, currentuserid, text, date_created
FROM  `1items` 
WHERE currentuserid = %d
ORDER BY  `1items`.`currentuserid` 

其中列出了我需要从数据库中提取的所有表,但是,我想知道是否有一种方法可以在 MySql 中动态过滤当前用户的 ID。

在第二列“currentuserid”中,它提取所有用户的 ID 并将它们输入到表中。

示例:如果我以用户 ID 4 登录 - 我希望查询过滤掉其他用户 - 截至目前,上述查询返回所有用户 ID 的表。

在搜索 wordpress stackexchange 时,我找到了这个:PHP MySQL query - return results for current user only 哪个不起作用,或者我没有在 wpdatatables 中正确使用它。

谢谢!

【问题讨论】:

  • 根据你的命名很难判断,但看起来你列出的查询应该已经做了你想要的(过滤WHERE currentuserid = %d)。大概%d 是当前用户ID,对吧?你的ORDER BY 什么也没做。
  • 我从另一个 stackexchange 问题得到 WHERE currentuserid = %d - 它实际上没有返回任何结果(除非我输入用户 ID。)所以我希望有类似 %d 的东西可以动态返回记录的在用户的结果中。感谢您的回复。

标签: mysql database wordpress filtering


【解决方案1】:

%d 是一个占位符,它本身没有内在价值。它用于准备语句中,以帮助防止 SQL 注入攻击

所以你需要做这样的事情:

$currentUser    = get_current_user_id();

$wpdb->query( $wpdb->prepare( 
    "
        SELECT id, currentuserid, text, date_created
        FROM  `1items` 
        WHERE currentuserid = %d
    ", 
        $currentUser
) );

正如 Brendan Long 指出的那样,当返回单个用户的结果时,order by 不会做任何事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    相关资源
    最近更新 更多