2012-03-30 7 views
0

私はPHP開発者ではありません。私はJSON文字列をデコードし、いくつかの値をmysqlデータベースに挿入しようとしています。私はjsonオブジェクト(jsonlintでテスト済み)の有効な配列を取得しているので、それらをデータベースに1つずつ追加しています。しかし、PHPのスロー:PHPは配列をオブジェクトとして扱います

<b>Fatal error</b>: Cannot use object of type stdClass as arrayエラー。

これはコードです:

$array = json_decode(stripslashes($_POST['data'])); 

for($i = 0, $l = sizeof($array); $i < $l; $i++){ 
    $obj = $array[$i]; 

    echo "ARRAY1: ".$array; 
    echo "L: ".$l; 
    echo "ARRAY2: ".gettype($array); 

    $q = 'INSERT INTO dependencies SET projectID = "1", `from` = "'.$obj->{'From'}.'", to = "'.$obj->{'To'}.'", type = "'.$obj->{'Type'}.'", cls = "'.$obj->{'Cls'}.'", lag = "'.$obj{'Lag'}.'"'; 

エラーがライン$q = 'INSERT INTO...からスローされ、印刷された変数は、実際に私の$配列が配列であることを示しています。

ARRAY1: ArrayL: 2ARRAY2: array。私はここで間違って何をしていますか?デバッグ目的のために

使用var_dump

json_decode(stripslashes($_POST['data']), true); 

いくつかの他の有用なアドバイス:あなたは2番目のオプションの引数を配列にしたい指定しない限り

+1

あなたは、配列の内容を印刷したい場合は、 'ますprint_r($配列)や' 'のvar_dump($配列)を使用し'ではなく、 –

+1

をエコー[*** SQL INJECTION ***](http://wikipedia.org/wiki/SQL_injection)に注意してください! – deceze

+0

私は誤って答えを見つけたかもしれませんが、誰かがjson_decodeの2番目のパラメータを使うことを提案しています。配列ではない配列を返すには、PHPがこのような愚かさですか? –

答えて

11

json_decodeは、オブジェクトを返します。これは、コード内のオブジェクト/配列の構造を理解するのに役立ちます。

あなたは投稿を介してデータを受け入れるべきではなく、それを衛生的なことなしにSQLクエリで使用するべきではありません。私はあなたができるだけ早くそれを修正することをお勧めします。

2

あなたは最後の代入で->が欠落している:ポールは指摘し、私はこの1つをお勧めするよう

$obj{'Lag'} 
0

最も簡単な方法です。しかし、あなたはこれまでに、オブジェクトの使用として配列をキャストする必要がある場合:

$newObject = (object) $oldArray; 
関連する問題