WordPress插件SQL查询数据循环无报错但失效,求代码错误排查
WordPress插件SQL查询循环无输出问题修复
核心问题分析与修复步骤:
- 修正数据库表名引用
WordPress数据库表默认带有前缀(如wp_),直接写students_list会导致表不存在,需用$wpdb->prefix拼接:
$result = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}students_list" );
- 调整查询结果访问方式
$wpdb->get_results()默认返回对象数组,不能用数组下标访问,需改为对象属性调用:
<td><?php echo $print->first_name; ?></td> <td><?php echo $print->last_name; ?></td> <td><?php echo $print->email; ?></td> <td><?php echo $print->phone; ?></td> <td><?php echo $print->address; ?></td>
若偏好关联数组,可给get_results()传入ARRAY_A参数:
$result = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}students_list", ARRAY_A );
此时就能用$print["first_name"]的方式访问。
- 开启调试模式暴露隐性错误
无报错信息是因为WordPress调试未开启,在wp-config.php中添加以下代码:
define( 'WP_DEBUG', true ); define( 'WP_DEBUG_LOG', true ); define( 'WP_DEBUG_DISPLAY', true );
这会显示或记录错误,帮助定位问题。
- 完善HTML结构
原代码中<td>未被<tr>包裹,导致HTML结构无效,浏览器无法正常渲染,需补充:
foreach( $result as $print) { ?> <tr> <td><?php echo $print->first_name; ?></td> <td><?php echo $print->last_name; ?></td> <td><?php echo $print->email; ?></td> <td><?php echo $print->phone; ?></td> <td><?php echo $print->address; ?></td> </tr> <?php }
- 增加空结果判断
循环前检查结果是否为空,避免无意义循环:
if ( ! empty( $result ) ) { foreach( $result as $print) { // 输出内容 } } else { echo '<tr><td colspan="5">暂无学生数据</td></tr>'; }
修正后的完整代码:
<?php function vssp_settings() { global $wpdb; // 使用带前缀的表名,返回对象数组 $result = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}students_list" ); // 检查是否有数据 if ( ! empty( $result ) ) { foreach( $result as $print) { ?> <tr> <td><?php echo $print->first_name; ?></td> <td><?php echo $print->last_name; ?></td> <td><?php echo $print->email; ?></td> <td><?php echo $print->phone; ?></td> <td><?php echo $print->address; ?></td> </tr> <?php } } else { echo '<tr><td colspan="5">暂无学生数据</td></tr>'; } } ?>
内容的提问来源于stack exchange,提问作者Amrinder Singh
相关产品推荐
相关产品推荐

