【发布时间】:2016-09-21 02:54:10
【问题描述】:
我有一个网站,它具有允许用户创建缩短 URL 的功能。为了处理 URL 缩短,我使用了 YOURLS(一个开源 URL 缩短器),它在我的另一台服务器上运行,并通过 API 调用连接两个站点。
我创建了一个带有一些自定义API actions 的YOURLS 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 的行。 -
忘记更新问题但我想通了,非常感谢您的回复/帮助,真的帮助我了解它是如何工作的!