求助:向WordPress数据库插入用户姓名与邮箱失败,代码无效
我来帮你一步步拆解代码里的问题,看看为什么用户数据没写入wpuser表:
1. 先排查逻辑阻断:$bearer_token变量未定义/为空
你的插入逻辑被if($bearer_token)包裹,但代码里完全没看到这个变量的初始化过程——如果这个变量不存在或者值为空,整个插入代码根本不会执行!
建议先把这个条件注释掉测试,或者确认$bearer_token的来源(比如是否从请求头中获取),先确保代码能进入到插入分支里。
2. 表名拼接错误
你写了:
$table_name = $wpdb->prefix . "wpuser";
默认WordPress的表前缀是wp_,这样拼接后表名会变成wp_wpuser,但你明确说要插入的是名为wpuser的表。如果你的表确实叫wpuser(不带前缀),应该直接写:
$table_name = 'wpuser';
如果实际表名是前缀+wpuser(比如wp_wpuser),那没问题,但先去数据库里确认下实际存在的表名是什么。
3. POST参数重复赋值,且未做存在性检查
你把$name和$email都赋值为$_POST['log'],这明显是笔误吧?应该对应两个不同的POST字段,比如:
$name = $_POST['name'] ?? ''; // 用空合并运算符避免Undefined index错误 $email = $_POST['email'] ?? '';
同时要确认前端表单确实传了对应的字段——比如表单里有name="name"和name="email"的输入框,而不是都叫log。
4. 重复引入WordPress核心文件
wp-load.php已经包含了wp-config.php,所以不需要单独写include_once('/var/www/html/wp-config.php');,重复引入可能导致不必要的错误,直接删掉这一行就行。
5. 没有错误处理,无法定位问题
在插入后添加错误检查,能直接看到数据库返回的错误信息,比如字段不存在、权限不足、表不存在等:
$result = $wpdb->insert( $table_name, array( 'name' => $name, 'email' => $email ) ); if ( $result === false ) { // 打印错误信息(生产环境要换成写入日志) echo $wpdb->last_error; } else { echo "插入成功,新记录ID:" . $wpdb->insert_id; }
6. 确认wpuser表的结构是否正确
检查你的wpuser表是否有name和email这两个字段,字段类型是否匹配(比如name是VARCHAR,email是VARCHAR/TEXT),有没有必填约束但你传了空值?
修正后的示例代码
include_once('/var/www/html/wp-load.php'); // 先检查必要的POST参数是否存在 if ( isset($_POST['name'], $_POST['email']) ) { global $wpdb; // 做安全过滤,避免SQL注入和非法数据 $name = sanitize_text_field($_POST['name']); $email = sanitize_email($_POST['email']); $table_name = 'wpuser'; // 根据实际表名调整 $result = $wpdb->insert( $table_name, array( 'name' => $name, 'email' => $email ), array( '%s', // 指定name是字符串类型 '%s' // 指定email是字符串类型 ) ); if ( $result === false ) { error_log('插入失败:' . $wpdb->last_error); // 写入服务器错误日志 echo '插入失败,请查看服务器日志'; } else { echo '用户数据已成功插入,ID:' . $wpdb->insert_id; } } else { echo '缺少必要的POST参数'; }
注:我加了WordPress自带的安全过滤函数,这是开发中必须的操作,能有效避免安全问题;另外明确指定字段格式,也能提高插入的兼容性和安全性。
内容的提问来源于stack exchange,提问作者user4704331

