【问题标题】:Dynamically add objects to array, fails on one server, not other将对象动态添加到数组中,在一台服务器上失败,而不是在其他服务器上
【发布时间】:2014-08-25 04:13:12
【问题描述】:

在我的本地服务器上(运行 php 5.4.4)这有效:

$json = array();

while ($row = $stmt->fetch_assoc()) {

   $json[] = ['id' => $row['id'] , 'username' => $row['username']];

}

在我的另一台服务器上(运行 php 5.3.28)我得到:

syntax error, unexpected '['

参考那条线

可能是什么原因,我该如何解决?也许是动态添加到数组的另一种方法

【问题讨论】:

    标签: php arrays json object dynamic


    【解决方案1】:

    因为只有PHP 5.4+支持数组的短语法

    Arrays

    声明从PHP 5.4 开始可以使用更短的数组语法。这就是您收到错误消息的原因,因为 PHP 5.3

    不支持 [

    使用常规语法修复它:

    while ($row = $stmt->fetch_assoc()) {
       $json[] = array('id' => $row['id'] , 'username' => $row['username']);
    }
    

    请注意,不确定您是否使用 mysqli,但在我看来,您正在做的是->fetchAll,因为您正在循环访问并且无论如何都要构建一个数组。在 PDO 中有一个名为 $stmt->fetchAll(PDO::FETCH_ASSOC); 的函数,它的作用与您的循环几乎相同,您只是不必循环遍历它。

    【讨论】:

    • 啊,我明白了。会试试的
    • 不错。现在我的主机很快就要更新 php(他们害怕失去安全模式哈哈);)谢谢
    • 关于 PDO。是的,我花了几天时间研究 PDO 与 mySQLi。我最终选择了 mysqli(来自常规 mysql),我可能会留在那里,即使 PDO 有一些不错的功能,而且 mysqli 的准备可能是一场恐怖表演......但也许有一天
    • 我认为 mysql/i 实际上也有这个选项: echo json_encode($conn->query('SELECT id, name FROM thetable')->fetch_all(MYSQLI_ASSOC));
    【解决方案2】:

    类似这样的:

    $count = 0;
    while ($row = $stmt->fetch_assoc()){
        $json[$count]['id'] = $row['id'];
        $json[$count]['username'] = $row['username'];
        $count++;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-25
      • 2010-12-30
      • 1970-01-01
      • 1970-01-01
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多