PHP将数组视为对象

时间:2012-03-30 01:44:49

标签: php mysql arrays json

我不是PHP开发人员所以我可能做错了什么。我正在尝试解码JSON字符串并将一些值插入到mysql数据库中。我正在获得一个有效的json对象数组(使用jsonlint测试),所以我将它们逐个添加到数据库中。但是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。我在这里做错了什么?

3 个答案:

答案 0 :(得分:11)

json_decode返回一个对象,除非你指定你想要一个带有第二个可选参数的数组:

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

其他一些有用的建议:

使用var_dump进行调试。它将帮助您理解代码中任何对象/数组的结构。

你不应该通过帖子接受数据,并且在没有任何卫生条件的情况下在SQL查询中使用它,无论如何。我强烈建议你尽快解决。

答案 1 :(得分:2)

您在上一次分配中遗漏了->

$obj{'Lag'}

答案 2 :(得分:0)

最简单的方法是保罗指出,我会建议这个。但是如果您需要将数组转换为对象使用:

$newObject = (object) $oldArray;