2012-03-30 23 views
0

Ich bin kein PHP-Entwickler, damit ich etwas falsch machen kann. Ich versuche, JSON-Zeichenfolge zu dekodieren und einige Werte in mysql-Datenbank einzufügen. Ich bekomme ein gültiges Array von JSON-Objekten (getestet mit Jsonlint), also füge ich sie einzeln zur Datenbank hinzu. Aber php wirft:PHP behandelt ein Array als ein Objekt

<b>Fatal error</b>: Cannot use object of type stdClass as array Fehler.

Dies ist der Code:

$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'}.'"'; 

Fehler aus der Leitung geworfen wird $q = 'INSERT INTO... und die gedruckten Variablen zeigen, dass meine $ array in der Tat ein Array ist:

ARRAY1: ArrayL: 2ARRAY2: array. Was mache ich hier falsch?

+1

wenn Sie Inhalte eines Arrays drucken möchten, verwenden Sie 'print_r ($ array)' oder 'var_dump ($ array)' eher als Echo –

+1

Kümmere dich darum [*** SQL INJECTION ***] (http://wikipedia.org/wiki/SQL_injection)! – deceze

+0

Ich habe die Antwort möglicherweise irrtümlich gefunden, jemand schlägt vor, den zweiten Parameter für json_decode zu verwenden. Ist PHP dumm, ein Array zurückzugeben, das kein Array ist? –

Antwort

11

json_decode gibt ein Objekt zurück, es sei denn, Sie ein Array mit dem zweiten optionalen Argument angeben möchten:

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

einige andere nützliche Ratschläge:

Verwenden var_dump für Debug-Zwecke. Es wird Ihnen helfen, die Struktur von Objekten/Arrays in Ihrem Code zu verstehen.

Sie sollten keine Daten per Post und die Verwendung in einer SQL-Abfrage ohne irgendeine sanitation, sowieso. Ich empfehle Ihnen dringend, das so schnell wie möglich zu beheben.

2

Sie eine -> in der letzten Zuweisung fehlt:

$obj{'Lag'} 
0

Der einfachste Weg ist, wie Paulus wies darauf hin, und ich würde diese ein beraten. Aber wenn Sie jemals brauchen ein Array als Objekt Verwendung würfen

$newObject = (object) $oldArray; 
Verwandte Themen