如何从执行的预准备语句创建JSON?

use*_*800 5 php sql json

我刚刚写了一些基本的PHP代码,如下所示:

$pdo = new PDO("mysql:host=localhost;dbname=locationtracker", "xxxx", "xxxx");
$statement = $pdo->prepare("SELECT * FROM waypoints");
$result = $statement->execute();

if ($result){
    echo "Success";
    $resultArray = array();
    $tmpArray = array();

    while($row = $statement->fetch()){
        print_r($row);
        echo "<br>";
        $tmpArray = $row;
        array_push($resultArray, $tmpArray);
    }
    print_r(json_encode($resultArray));
}else{
    die("Error.<br>");
}
Run Code Online (Sandbox Code Playgroud)

sql表'waypoints'看起来像这样:

waypoints
        | x: double
        | y: double
        | name: varchar(255)
        | city: varchar(255)
        | id: Int
Run Code Online (Sandbox Code Playgroud)

所以我想将数组转换为JSON格式.听起来很简单,但我的PHP代码产生了这样的:

Success
Array ( [x] => 7.0000 [0] => 7.0000 [y] => 32.0000 [1] => 32.0000 [name] => Georgia [2] => Georgia [city] => Georgia [3] => Georgia [id] => 1 [4] => 1 ) 
Array ( [x] => 5.0000 [0] => 5.0000 [y] => 34.000 [1] => 34.000 [name] => Home [2] => Home [city] => St.Martin [3] => St.Martin [id] => 1 [4] => 1 ) 

[{"x":"7.0000","0":"7.0000","y":"32.0000","1":"32.0000","name":"Georgia","2":"Georgia","city":"Georgia","3":"Georgia","id":"1","4":"1"},{"x":"5.0000","0":"5.0000","y":"34.000","1":"34.000","name":"Home","2":"Home","city":"St.Martin","3":"St.Martin","id":"1","4":"1"}]
Run Code Online (Sandbox Code Playgroud)

这不是我想要的.所有变量现在都是重复的(一次:名称,第二次:索引).有没有办法只按名称获取变量,因为我不希望每个对象在我的数组和JSON对象中都是两次.

如果您还有其他问题,请与我们联系.

Jef*_*ett 2

默认情况下,PDO fetch 返回一个按数字和关联索引的数组。您只需要关联索引。

while($row = $statement->fetch(PDO::FETCH_ASSOC)){
  //...
}
Run Code Online (Sandbox Code Playgroud)

请参阅https://secure.php.net/manual/en/pdostatement.fetch.php#refsect1-pdostatement.fetch-parameters