【问题标题】:YOURLS plugin to filter API call for specific MySQL column用于过滤特定 MySQL 列的 API 调用的 YOURLS 插件
【发布时间】:2016-09-21 02:54:10
【问题描述】:

我有一个网站,它具有允许用户创建缩短 URL 的功能。为了处理 URL 缩短,我使用了 YOURLS(一个开源 URL 缩短器),它在我的另一台服务器上运行,并通过 API 调用连接两个站点。

我创建了一个带有一些自定义API actionsYOURLS plugin,因此当用户创建一个短 URL 时,它会将他们的用户 ID 从我的网站附加到 yourls_url 表,如下所示:

当用户访问他们的“我的链接”页面时,我需要进行 API 调用以返回该用户创建的所有短 URL。为此,它应该像为“api_result_stats”创建一个过滤器一样简单。

这是我创建的过滤器,假设只返回指定用户创建的 URL:

yourls_add_filter( 'api_result_stats', 'separate_users_api_stats' );

function separate_users_api_stats() {
    global $ydb;

    $user = ( isset( $_REQUEST['user'] ) ? $_REQUEST['user'] : '' );

    $table = YOURLS_DB_TABLE_URL;
    $result = $ydb->query("SELECT * FROM `$table` WHERE  `user` = '" . $user . "'");

    return $result > 0;

}

要对此进行测试,我可以尝试http://example.com/yourls-api.php?action=stats&user=test123&limit=10&filter=last&signature=xxxxxxxxxx,但不幸的是,我收到的只是:

我对 PHP/MYSQL 不太熟悉,所以我已经坚持了很长一段时间了,如果有人对我哪里出错有任何想法或者可以提供一个例子,我将不胜感激!

【问题讨论】:

  • 嗨 U54!我看到您正在使用 PHPMyAdmin。故障排除的第一步是手动检查您要运行的查询是否正在返回数据。打开 SQL 选项卡并运行以下查询: SELECT keyword FROM yourls_url WHERE user = 'test123';如果您返回一些行,请告诉我。您还可以考虑更改separate_users_api_stats() 函数返回的内容。我注意到“return $result > 0”如果您从数据库中获取行,则只会返回 TRUE,如果没有,则返回 FALSE。
  • @Matthew 非常感谢您的回复!我已经运行了查询,看起来一切正常,它返回了所有预期的数据。 Here 是 YOURLS 代码中的 yourls_api_stats 函数,我将其附加到 separate_users_api_stats 过滤器。通过让它返回真或假,我相信这将允许我只返回“真”的行,在这种情况下只会返回该用户创建的行,不是吗?
  • 很抱歉没有尽快回复!我一直很忙。由于查询返回数据,因此您的函数返回 true 或 false 是您在调用函数后没有获取该数据的原因。 return $result > 0; 是在询问 PHP “我得到结果了吗?”和 PHP 说,“是的”。因此,您看到您在返回行中询问了一个简单的是/否问题,而不是返回实际数据。将其更改为 return $result; 以在调用您的函数后获取实际数据。
  • 另外,您的实际 SQL 查询已经包含 WHERE user = ...。那就是用户过滤器;数据库已经只为您提供用户为 $user 的行。
  • 忘记更新问题但我想通了,非常感谢您的回复/帮助,真的帮助我了解它是如何工作的!

标签: php mysql yourls


【解决方案1】:

这是为我解决这个问题的方法:

yourls_add_filter( 'api_result_stats', 'separate_users_api_stats' );

function separate_users_api_stats() {
    global $ydb;

    $user = ( isset( $_REQUEST['user'] ) ? $_REQUEST['user'] : '' );

    $table = YOURLS_DB_TABLE_URL;

    $query = "SELECT * FROM `$table` WHERE `user` = '" . $user . "'";

    $result = $ydb -> get_results($query);

    return $result;

}

【讨论】:

    猜你喜欢
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    • 2013-07-02
    • 2017-03-11
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    相关资源
    最近更新 更多