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

如何向WordPress数据库表插入数据?MVC模式插入失败求助

WordPress MVC模式表单插入数据库无响应排查

我是PHP和WordPress新手,正在学习相关内容,现在遇到一个问题:尝试用MVC模式把表单数据插入WordPress数据库,但功能完全没反应,控制台和浏览器都没错误提示,找不到问题在哪。试过GET和POST方法,结果都一样。我知道要做查询的sanitize,但现在只想先把基础功能跑通。

相关代码

Model代码(BitTestModel2)

class BitTestModel2{
    private $brand;
    private $cod;
    private $cantitate;
    private $db_conn;

    public function __construct($a,$b,$c,$d) {
        $this->brand =$a;
        $this->cod = $b;
        $this->cantitate=$c;
        $this->db_conn = $d;
    }

    public function send_data() {
        
        if (empty($this->cantitate)) {

            echo 'Please insert data';
        
        } else{

            for ($index = 0; $index < count($this->cantitate); $index++) {

                $f_brand = $this->brand[$index];    
                $f_cod = $this->cod[$index];
                $f_cantitati = $this->cantitate[$index];

                if (!empty($f_cantitati)) {

                    $table = $this->db_conn->prefix. 'date_abg';

                    var_dump($table);

                    echo '<br><br>';

                    $param = array(
                        'brand' => $f_brand,
                        'cod' => $f_cod,
                        'cantitate' => $f_cantitati
                    );

                    print_r( 'Will insert the line ::');
                    echo '<br><br>';
                    var_dump($param);

                    $stm =$this->db_conn -> insert($table, $param);
                    echo '<br><br>';
                    var_dump($stm);
                    echo '<br><br>';
                }
            }

            $noticemsg = "";

            if (!empty($param)) {
                echo 'data saved';
            } elseif (empty($param)) {
                $noticemsg .= 'please insert data';
                echo $noticemsg;
            }

        }
    }
}

Controller代码

function bittest_colect_data(){
    global $wpdb;

    require_once('inc/model.php');

    require_once('inc/view.php');

    $brand = isset($_GET['brand']) ?$_GET['brand'] : false;
    $cod =  isset($_GET['cod']) ?$_GET['cod'] : false;;
    $cantitate =  isset($_GET['cantitate']) ?$_GET['cantitate'] : false;
    var_dump($cantitate);

    $model_obj = new BitTestModel( $wpdb);
    $results = $model_obj->get_table();

    $model_obj2 = new BitTestModel2($brand, $cod, $cantitate , $wpdb);
    $model_obj2->send_data();

    $view_obj = new BitTestView;
    $output = $view_obj->show_table($results);
    
    return $output;
    
}

排查方向

  • 确认表单参数格式:代码里假设$brand、$cod、$cantitate都是数组(使用了$this->brand[$index]),如果表单的name属性没写成数组格式(比如name="brand[]"),$_GET['brand']只会是单个字符串,循环时会直接出错。检查表单元素,确保name是数组形式:

    <input type="text" name="brand[]">
    <input type="text" name="cod[]">
    <input type="text" name="cantitate[]">
    
  • 查看数据库插入错误详情:WordPress的$wpdb对象自带last_error属性,插入失败后可以直接打印错误信息,在$stm = $this->db_conn->insert(...)后面添加:

    if (!$stm) {
        var_dump($this->db_conn->last_error);
    }
    

    这能直接看到插入失败的具体原因,比如表不存在、字段不匹配、数据类型错误等。

  • 验证表名与字段:确认$wpdb->prefix . 'date_abg'生成的表名(比如wp_date_abg)确实存在于数据库中,同时检查表的brand、cod、cantitate字段是否存在,字段类型是否和传入数据匹配(比如cantitate如果是数字类型,要确保传入的是数字而非字符串)。

  • 确认函数是否被触发:在bittest_colect_data()函数开头添加die('Function triggered'),访问页面时如果看不到这个输出,说明函数根本没被调用,需要检查短代码、页面模板或路由配置是否正确。

  • 修复变量初始化问题:send_data()方法最后判断的$param是在循环内部定义的,如果循环没执行(比如所有f_cantitati都为空),$param会未初始化导致报错。可以在循环前先初始化$param = []。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 08:08:20