2009-06-30 16 views
0

我試圖轉義所有的字符,並且不起作用。我需要特別插入這個字符串。任何人都可以告訴我我錯過了什麼嗎?其他4個插入語句正常工作。下面是完整的代碼:Wordpress dbDelta函數無法執行我的查詢

$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); 

感謝

UPDATE

問題在於字符串中的分號。我試圖用正常的方式逃避這些(),但在這裏似乎不起作用。該字符串現在看起來像:1:{s:10:\「subscriber \」\; b:1 \;} 任何想法?

+0

我想你錯過了錯誤信息。數據庫返回什麼樣的錯誤? – 2009-06-30 09:14:09

+0

你可以包含錯誤信息嗎? – jerryjvl 2009-06-30 09:14:46

+0

它是哪個數據庫產品? – 2009-06-30 09:16:48

回答

5

(此答案演變爲OP提供了更多的代碼這是最後的,簡化的答案。!)

WordPress的dbDelta功能爆炸它是在給定字符串「;」,這是在你的JSON裏面。你需要做的是將你的查詢分隔成一個數組,然後把它傳遞給dbDelta。

$sql1=array(); 
$sql1[]="insert into...."; 
$sql1[]="insert into...."; 

dbDelta($sql1); 
-1

您很可能需要將另一個\轉換成\字符 - 這是必要的,因爲\'會讓您插入單引號。

INSERT INTO `wp_usermeta` 
VALUES (NULL, $user_id, 'wp_capabilities', 'a:1:{s:10:\\"subscriber\\";b:1;}');