我有个问题。我有一个跟踪单个文件下载的PHP脚本,我正在寻找一种在单个帖子中显示该数字的方法。我有一个半生不熟的解决方案——一个简单的ol\'MySQL手动连接脚本,但我正在尝试将其转换为Wordpress插件(我希望它使用WPDB)。I\'ve tried to convert it, but I don\'t know what the Wordpress alternative to \'mysql_fetch_array.\' 无论如何,我已经在下面加入了原始脚本,以及我在Wordpress友好版本上的进展。
普通版本:
function mb_download_count() {
global $post;
if (get_post_meta($post->ID, \'zipname\', TRUE)) {
$namemeta = get_post_meta($post->ID, \'zipname\', TRUE);
require $_SERVER[\'DOCUMENT_ROOT\'].\'/downloader-connect.php\';
$result = mysql_query("SELECT * FROM mb_download_manager
WHERE filename=\'".$namemeta.".zip\'");
// get the first (and hopefully only) entry from the result
$row = mysql_fetch_array( $result );
// Print out the contents of each row into a table
if ($row[\'downloads\'] == \'\') { echo (\'0\'); } else {
echo $row[\'downloads\']; }
} else { }
}
迄今为止,Wordpress友好版本:
function mb_download_count() {
global $wpdb;
global $post;
if (get_post_meta($post->ID, \'zipname\', TRUE)) {
$namemeta = get_post_meta($post->ID, \'zipname\', TRUE);
$result = $wpdb->query("SELECT * FROM mb_download_manager
WHERE filename=\'".$namemeta.".zip\'");
$row = mysql_fetch_array( $result );
if ($row[\'downloads\'] == \'\') { echo (\'0\'); } else {
echo $row[\'downloads\']; }
} else { }
}
最合适的回答,由SO网友:EAMann 整理而成
而不是使用$wpdb->query()
, 使用$wpdb->get_results()
. 此方法允许您指定返回类型,以便将查询作为关联数组返回。例如
$results = $wpdb->get_results(
"SELECT * FROM mb_download_manager
WHERE filename=\'" . $namemeta . ".zip\'",
ARRAY_A
);
这将返回关联数组的索引数组。。。因此,您可以反复查看结果:
foreach( $results as $row ) {
if ( $row[\'downloads\'] == \'\') // ... and so on
如果卡住,请再次检查
Codex documentation.
编辑1/13如果要将所有下载内容相加,需要做两件事:
保持一个连续的总数,正确地将变量转换为数字所以在你做你的foreach
循环,声明下载计数器:
$counter = 0;
foreach( $results as $row ) {
// etc ...
此变量将保存您的下载总数。
接下来,您需要将下载次数添加到计数器:
$counter = 0;
foreach( $results as $row ) {
$counter += intval( $row[\'downloads\'] );
// etc ...
The
intval()
函数将接收一个混合变量并返回其整数值。所以字符串
"0"
成为整数
0
. 这允许您实际添加结果,而不是串联字符串(例如,
"1" + "2" = "12"
但是
1 + 2 = 3
).
SO网友:MathSmath
由于您只需要一列中的一个值,因此可以使用get\\u var方法而不是query方法——这样,您就不需要循环任何结果(结果是字符串)。因此,在您的情况下,您可以执行以下操作:
$downloads = $wpdb->get_var($wpdb->prepare("SELECT downloads FROM mb_download_manager WHERE filename=%s", $namemeta.".zip"));
然后,您可以只回显结果:
echo $downloads;
请参见
wpdb codex page, 根据您的情况,它还有一长串可以使用的其他wpdb方法。其中一些方法(如insert方法)比编写直接SQL更容易使用。
哦,还要注意准备方法的使用,这有助于防止注射和垃圾。这不是必需的,但这是很好的做法。还请注意,此表需要位于WordPress数据库中。