php - Json_encode 改变我查询的顺序

标签 php mysql pdo sql-order-by json

我有一个按列排序的 mysql 查询。如果我只运行 php.ini 就可以正常工作。我用json_encode发给客户端后,顺序改成了主键。为什么会这样,有解决办法吗?

查询看起来像:

try{
    $dbh = new PDO('mysql:host=localhost;dbname=Batik', 'root', 'root');
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
    $_SESSION['table'] = $_SESSION['category'] = $table = $_GET['button'];
    $count = $dbh->query("SELECT * FROM $table ORDER BY `order` ASC");
    $count->setFetchMode(PDO::FETCH_ASSOC);
    $myarray = array();
    while ($row = $count->fetch()) {
        $id = array_shift($row);
        $myarray[$id] = $row;
    }
    print json_encode($myarray);
}  catch (PDOException $exception) {
    echo "There was an error uploading your information, please contact James for assistance. "; 
    error_log($exception->getMessage());
 };

所以,我想要并在普通 php 中获得的输出是这样的:(ID = primary_key)

  Order:     ID:      Location:
  1             4         foto1.jpg
  2             5         foto3.jpg
  3             3         foto2.jpg
  4             2          foto4.jpg
  5             1          foto5.jpg

在我对数组进行 json_encode 并输出到客户端后,我得到了这个:(ID = primary_key)

  Order:     ID:       Location:
  5             1          foto5.jpg
  4             2          foto4.jpg
  3             3          foto2.jpg
  1             4          foto1.jpg
  2             5          foto3.jpg

我希望这是有道理的。

最佳答案

如果您使用带数字的文字对象,客户端会自动对数组进行排序。 因此,如果您遗漏了 id,您应该会得到正确的内容。

替换

while ($row = $count->fetch()) {
    $id = array_shift($row);
    $myarray[$id] = $row;
}

//doing so you create this
json array=[
 0=undefined,
 1={order:5,id:1;location1},
 2={order:4,id:2;location2},
 3={order:3,id:3;location3},
 4={order:2,id:4;location4},
]
//error

while ($row = $count->fetch()) {
    $myarray[] = $row;
}

基本上您将文字对象转换为一个简单的数组。如果您开始删除一些图像,这可能会导致一些错误。

那么您可能只需要 id 和位置

所以

SELECT id,location FROM ... ORDER BY order ASC

你有

[[1,location1],[2,location2]]

[{id:1,location:"location1"},{id:2,location:"location2"}]
  //0 wich is order 1        //1 wich is order 2

您的 mysql 查询创建的排序顺序是 json 数组索引。

关于php - Json_encode 改变我查询的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20693404/

相关文章:

javascript - 如何使文本区域动态变化?

php - 如何在 PHP 中验证 MYSQL 日期?

php - Laravel:如何制作列名的键?

php - SimpleXML 对象中的 "At sign"@?

php - MySQL 说 : "#2014 - Commands out of sync; you can' t run this command now"in nested select Query Using PHP

mysql - SQL 2 INNER JOIN 与 group by

php - 将值插入数据库的问题

MySql - 将数组值(匹配和不匹配)插入数据库匹配列

mysql - Mediawiki 数据库错误 1205

使用 PDO 更新 PHP