2012-03-30 2 views
0

Я не разработчик PHP, поэтому я могу делать что-то неправильно. Я пытаюсь декодировать строку JSON и вставлять некоторые значения в базу данных mysql. Я получаю действительный массив объектов json (проверен с помощью jsonlint), поэтому я добавляю их по одному в базу данных. Но php throws: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. Что я здесь делаю неправильно?

+1

, если вы хотите распечатать содержимое массива, используйте 'print_r ($ массив)' или 'var_dump ($ массив)', а не эхо –

+1

Позаботьтесь об этом [*** SQL INJECTION ***] (http://wikipedia.org/wiki/SQL_injection)! – deceze

+0

Возможно, я нашел ответ по ошибке, кто-то предлагает использовать второй параметр для json_decode. Является ли PHP немым, чтобы вернуть массив, который не является массивом? –

ответ

11

json_decode возвращает объект, если вы не укажете вы хотите массив со вторым дополнительным аргументом:

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

Некоторые другие полезные советы:

Использование var_dump для целей отладки. Это поможет вам понять структуру любых объектов/массивов в вашем коде.

Вы не должны принимать данные через сообщение и использовать его в SQL-запросе без какой-либо санитарии. Я настоятельно рекомендую вам исправить это как можно скорее.

2

Вы не нашли -> в последнем назначении:

$obj{'Lag'} 
0

Самый простой способ, как Павел указал, и я советовал бы это. Но если вам когда-нибудь понадобится, чтобы бросить массив в качестве использования объекта:

$newObject = (object) $oldArray; 
Смежные вопросы