在独立PHP页面向WordPress添加订阅者遇日期与语法问题求助
问题解决方案
1. 日期存入显示为0的修复
问题根源是SQL语句中$essai未用单引号包裹,user_registered属于datetime类型,必须将日期字符串以字符串形式传入数据库。更稳妥的方式是使用预处理绑定参数,既能避免SQL注入风险,也能自动处理数据类型转换:
echo date('Y-m-d H:i:s'); $a = date("Y-m-d H:i:s"); include('base2.php'); // 用占位符替代手动拼接变量,避免格式错误 $sql = "INSERT INTO `u4_testclone`.`wp_users` (`ID`, `user_login`, `user_pass`, `user_nicename`, `user_email`,`user_url`,`user_registered`, `user_activation_key`, `user_status`, `display_name`) VALUES (?, ?, MD5(?), ?, ?, ?, ?, ?, ?, ?)"; $query = $bdd->prepare($sql); // 按占位符顺序绑定参数 $query->execute([ '312', 'demo', 'demo', 'Your Name', 'phil@pecheperle.be', 'http://www.example.com/', $a, '', '0', 'Your Name' ]);
2. 订阅者权限引号错误的修复
wp_capabilities存储的是PHP序列化后的数组,手动编写字符串时内部双引号会和SQL语句的外层引号冲突,引发语法错误。推荐两种修复方式:
方式1:预处理绑定参数(最优方案)
先通过PHP函数序列化权限数组,再用预处理绑定参数传入,彻底避免引号冲突:
// 序列化订阅者权限数组 $capabilities = serialize(['subscriber' => true]); $sql2 = "INSERT INTO `u4_testclone`.`wp_usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES (NULL, ?, ?, ?)"; $query = $bdd->prepare($sql2); // 注意user_id要和wp_users表中插入的ID(312)保持一致,之前写的3是错误的 $query->execute(['312', 'wp_capabilities', $capabilities]); // 修正wp_user_level插入,订阅者对应的级别是0,不是管理员的10 $sql3 = "INSERT INTO `u4_testclone`.`wp_usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES (NULL, ?, ?, ?)"; $query = $bdd->prepare($sql3); $query->execute(['312', 'wp_user_level', '0']);
方式2:转义内部引号(不推荐,易出错)
如果一定要手动编写序列化字符串,需对内部双引号进行转义:
$sql2 = "INSERT INTO `u4_testclone`.`wp_usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES (NULL, '312', 'wp_capabilities', 'a:1:{s:10:\"subscriber\";b:1;}')"; $query = $bdd->prepare($sql2); $query->execute();
额外注意事项
- 原代码中
wp_user_level写为10,这是管理员级别,订阅者对应的正确级别是0,需修正。 user_id必须和wp_users表中插入的用户ID(312)保持一致,否则权限会绑定到错误用户。
内容的提问来源于stack exchange,提问作者pierre
相关产品推荐
相关产品推荐

