如何向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

