2015-11-06 22 views
1

我想從json.stringify中插入數據庫中的一些數據。尤其我執行以下操作:json.stringify轉換爲數組php不插入到mysql

$('#get-checked-data').on('click', function(event) { 
    event.preventDefault(); 
    var checkedItems = []; 
    $("#check-list-box li.active").each(function() { 
     var $this = $(this); 
     var checkedItem = { subarea: $this.attr('data-value') }; 
    checkedItems.push(checkedItem); 
    }); 

    var lawcase = JSON.stringify(checkedItems); 

    $('#display-json').html("<input type='text' name='case' value='" + 

lawcase + "' readonly >"); 
     }); 
}); 

從json.stringify值看起來像這樣:

[{ 「分區」: 「1」},{ 「分區」: 「2」}]

我選擇數據並通過POST發送給處理信息的類。

$user->case=$_POST['case']; 

然後我操縱數據將字符串轉換成一個數組:

$query = 'INSERT INTO subarea (id,subarea_id,area_id) VALUES (:a,:b,:c)'; 



    $usercase=$this->case; 
    $check=json_decode($usercase,true); 
$stmt = $this->conn->prepare($query); 

和陣列看起來像這樣,對我來說這似乎是不正確,但我是新進入陣列和並不怎麼(1){[0] => array(1){[「subarea」] => string(1)「1」} [1] =>數組(1){[ 「subarea」] => string(1)「2」}}

最後我運行foreach到inser噸

$stmt = $this->conn->prepare($query); 
foreach($check as $key => $item) 
{   
    $stmt->bindValue(':a',$this->user_id) ; 
    $stmt->bindValue(':b', $item['subarea']); 
    $stmt->bindValue(':c', $areavalue);//This comes from another variable, don't pay atention. 
    $stmt->execute(); 
} 

但我接收到通知:Array對字符串的轉換在$ stmt-> bindValue( ':B',$項);線。我已嘗試幾乎所有的real_escape_string,編碼,解碼所有內容,但仍然收到不成功的輸出結果。我檢查了stackflow和其他網站,手冊和我想念的東西,不讓我解決問題。

希望有人能幫助我,提前謝謝。

編輯:該代碼是正確的,我使用共享服務器和問題來自該服務器的配置。謝謝你的回覆。

回答

0

您需要引用分區鍵,例如$ item ['subarea']而不是數組本身,否則會給你數組字符串轉換錯誤。

+0

我也試過,問題是數據庫收到雙重結果。我相信問題出在我用json_decode($ usercase,true)構建的數組中;但我不知道如何解決這個問題。 – lostintheriver

+0

問題可能來自[「subarea」] => string(1)「1」。特別是從字符串(1)? – lostintheriver

+0

我相信它正在做所期望的事情,因爲你有兩個數組元素,它會遍歷它們並執行語句兩次,一次是分區=> 1,一次是分區=> 2。 –