我试图逃避所有角色,但这不起作用。我需要专门插入这个字符串。谁能告诉我我错过了什么?其他4个插入语句工作正常。以下是完整代码:
$user_id = mysql_insert_id();
$sql1 = "INSERT INTO `wp_usermeta` VALUES (NULL, $user_id, 'nickname', '$email');
INSERT INTO `wp_usermeta` VALUES (NULL, $user_id, 'rich_editing', 'true');
INSERT INTO `wp_usermeta` VALUES (NULL, $user_id, 'comment_shortcuts', 'false');
INSERT INTO `wp_usermeta` VALUES (NULL, $user_id, 'admin_color', 'fresh');";
$sql1 .= "INSERT INTO `wp_usermeta` VALUES (NULL, $user_id, 'wp_capabilities', 'a:1:{s:10:\"subscriber\";b:1;}');";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql1);
由于
更新
问题在于字符串中的分号。我试图以正常的方式逃避这些()但这似乎不适用于此。该字符串现在看起来像:1:{s:10:\“subscriber \”\; b:1 \;} 有什么想法吗?
答案 0 :(得分:5)
(这个答案随着OP提供了更多代码而演变。这是最终的,简化的答案!)
wordpress dbDelta函数会爆炸它在';'上给出的字符串,它位于你的JSON中。您需要做的是将查询分成一个数组,然后将其传递给dbDelta。
$sql1=array();
$sql1[]="insert into....";
$sql1[]="insert into....";
dbDelta($sql1);
答案 1 :(得分:-1)
您很可能需要使用其他\
转义\
字符 - 这是必要的,因为\'
会允许您插入单引号。
INSERT INTO `wp_usermeta`
VALUES (NULL, $user_id, 'wp_capabilities', 'a:1:{s:10:\\"subscriber\\";b:1;}');