wp插件中的排序表不起作用,缺少什么



我有一些代码,我想我记得以前工作过,但我不记得是否测试过。我想我测试过了。不管怎样,我今天把网站移到了一个新的域,无法访问原始域进行测试。

它在第一列上运行良好,但如果我选择任何其他列,我会得到下面的错误。

〔2021年6月28日21:39:46 UTC〕WordPress数据库错误您有一个错误在您的SQL语法中;查看与MySQL对应的手册在'Viewed desc LIMIT 50附近使用正确语法的服务器版本查询SELECT*FROM wp_myrows ORDER BY Date的第1行的OFFSET 0'查看由制造的desc LIMIT 50 OFFSET 0do_action('toplevel_page_wp_list_table_class'(,wp_Hook->do_action,WP_Hook->apply_filters,SP_Plugin->plugin_settings_page,Customers_List->prepare_items,Customers_List::get_Customers

我应该可以点击排序列,但这一部分是error_log说我有问题的地方:

public static function get_rows( $per_page = 50, $page_number = 1 ) {
global $wpdb;
$sql = "SELECT * FROM {$wpdb->prefix}myrows";
if ( !empty( $_REQUEST['orderby'] ) ) {
$sql .= ' ORDER BY ' . esc_sql( $_REQUEST['orderby'] );
$sql .= !empty( $_REQUEST['order'] ) ? ' ' . esc_sql( $_REQUEST['order'] ) : ' ASC';
}
$sql .= " LIMIT $per_page";
$sql .= ' OFFSET ' . ( $page_number - 1 ) * $per_page;

$result = $wpdb->get_results( $sql, 'ARRAY_A' );
return $result;
}

我可能错了,但它看起来像是在循环?我花了很多时间在这上面,但我找不到错误。如何解决此问题,以便表列能够正确排序?

问题是order_by参数包含一个由多个单词组成的值。

当您的脚本构建查询时,它以SELECT * FROM wp_myrows ORDER BY Date Viewed desc LIMIT 50 OFFSET 0结束。在这种情况下,Date Viewed不是有效的列名。

为了使查询有效,您必须在多字列名周围添加反勾号。所以你的结果应该是:

SELECT * FROM wp_myrows ORDER BY `Date Viewed` desc LIMIT 50 OFFSET 0

这意味着你的代码应该是这样的:

public static function get_rows( $per_page = 50, $page_number = 1 ) {
global $wpdb;
$sql = "SELECT * FROM {$wpdb->prefix}myrows";
if ( !empty( $_REQUEST['orderby'] ) ) {
$sql .= ' ORDER BY `' . esc_sql( $_REQUEST['orderby'] ) . '`';
$sql .= !empty( $_REQUEST['order'] ) ? ' ' . esc_sql( $_REQUEST['order'] ) : ' ASC';
}
$sql .= " LIMIT $per_page";
$sql .= ' OFFSET ' . ( $page_number - 1 ) * $per_page;

$result = $wpdb->get_results( $sql, 'ARRAY_A' );
return $result;
}

最新更新