使用WordPress函数检索数据

时间:2016-02-24 作者:Azib.H

我一直在开发开源插件,并试图为其添加新功能。现在我一直在这样做

else if( $selected_report == "greport" ) {

    $sql = mysql_query( "SELECT rating_postid FROM {$wpdb->ratings}" ) or die( mysql_error() );
}

generate_csv( $sql );
exit;

function generate_csv( $sql ) { 

    header( \'Content-Type: text/csv; charset=utf-8\' );
    header( \'Content-Disposition: attachment; filename=data.csv\' ); 


    $row = mysql_fetch_assoc( $sql );
    $fp = fopen( \'php://output\', \'w\' );

    if( $row ) { 
        fputcsv( $fp, array_keys( $row ) ); 
        mysql_data_seek( $sql, 0 ); 
    }

    while( $row = mysql_fetch_assoc( $sql ) ) {
        fputcsv( $fp, $row );
    }   

    fclose( $fp );
}
这非常有效,但我被告知要使用WordPress函数来获取数据。我把查询改成这样

$sql = $wpdb-> get_results( "SELECT rating_id FROM {$wpdb->ratings}" );
这会给下载功能带来问题,因为它无法识别sql_fetch_assoc. 我试着迭代那些同样不起作用的值。这是我第一次使用WordPress。任何建议都会大有帮助。

2 个回复
最合适的回答,由SO网友:Wes Moberly 整理而成

默认情况下$wpdb->get_results() 以对象数组的形式返回结果。如果需要关联数组的数组,只需执行以下操作:

$results = $wpdb->get_results( "...", ARRAY_A );
显然,我不熟悉您的项目或您正在使用的代码,而且我还没有对此进行测试,但您可能希望执行以下操作:

$results = $wpdb->get_results(
    "SELECT rating_postid FROM {$wpdb->ratings}",
    ARRAY_A
);

if ( ! empty( $results ) ) {

    header( \'Content-Type: text/csv; charset=utf-8\' );
    header( \'Content-Disposition: attachment; filename=data.csv\' );

    $fp = fopen( \'php://output\', \'w\' );

    fputcsv( $fp, array_keys( $results[0] ) );

    foreach ( $results as $row ) {
        fputcsv( $fp, $row );
    }

    fclose( $fp );

}

SO网友:Mridul Aggarwal

千万不要在wordpress中使用任何mysql函数。当您调用wordpress函数时,您将得到直接返回给您的数据。对于eg。

$values = $wpdb->get_col( "SELECT rating_id FROM {$wpdb->ratings}" );
foreach($values as $value) {
    // $value is the exact value as stored in the mysql database table
}
有关更多详细信息,请参阅https://codex.wordpress.org/Class_Reference/wpdb