You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress短码中mysql_fetch_array转$wpdb->get_results后无数据问题

问题分析与修正方案

原代码的核心错误:

  • 错误使用$wpdb->query():该方法执行查询时,返回的是受影响的行数(写操作)或布尔值(读操作),并非查询结果集,不能传递给$wpdb->get_results()使用。
  • 字段不匹配:初始代码中SELECT countryid,但输出时调用$row->city,字段名称不一致,无法获取对应数据。
  • 循环变量引用错误:修改后的foreach代码中,错误使用$rows->city,应使用循环迭代的单个对象$row->city。
  • option标签的value属性不完整:原代码中<option value>未赋值,不符合HTML规范,也无法正确传递选中值。

修正后的完整代码:

add_shortcode( 'get-city', function () {
    ob_start();
    global $wpdb;
    // 直接用get_results执行查询,获取结果集对象数组
    $rows = $wpdb->get_results("SELECT city FROM {$wpdb->prefix}city");
?>
    <select name="city"> 
        <option>Select City</option> 
        <?php foreach( $rows as $row ): ?>
            <!-- 给option的value和文本都赋值为city字段的值 -->
            <option value="<?php echo esc_attr($row->city); ?>"><?php echo esc_html($row->city); ?></option>
        <?php endforeach; ?>
    </select>
<?php
    return ob_get_clean();
});

额外优化说明:

  • 使用esc_attr()和esc_html()对数据库取出的值进行转义,避免XSS安全风险,符合WordPress开发规范。
  • 采用PHP替代语法(foreach(): ... endforeach;),让HTML和PHP代码混合更易读。

内容的提问来源于stack exchange,提问作者Plonic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 22:10:49