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

Posted

技术标签:

【中文标题】如何从执行的准备好的语句创建 JSON?【英文标题】:How to create JSON from executed prepared statement? 【发布时间】:2018-04-06 23:14:09 【问题描述】:

我刚刚写了一些基本的 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>");

sql 表 'waypoints' 如下所示:

waypoints
        | x: double
        | y: double
        | name: varchar(255)
        | city: varchar(255)
        | id: Int

所以我想将数组转换为 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"]

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

如果您还有其他问题,请告诉我。

【问题讨论】:

$statement-&gt;fetch(PDO::FETCH_ASSOC); 您好,很抱歉这种奇怪的沟通方式。我想知道您是否解决了superuser.com/questions/1412460/… 中的问题。我有完全相同的问题,找不到问题。我没有足够的代表问你超级用户,所以我在这里问。 哈哈,奇怪的是你遇到了完全相同的问题。不幸的是,那时我还没有,所以从那以后我就再也没有真正找到方法,也没有碰过它。您可能只是再次在 SU 上提出相同的问题(详细说明您的问题),并留下指向原始(我的)问题的链接作为参考。对不起:(@LeoSegol 【参考方案1】:

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

while($row = $statement->fetch(PDO::FETCH_ASSOC))
  //...

见https://secure.php.net/manual/en/pdostatement.fetch.php#refsect1-pdostatement.fetch-parameters

【讨论】:

以上是关于如何从执行的准备好的语句创建 JSON?的主要内容,如果未能解决你的问题,请参考以下文章

Golang使用准备好的SQL语句

准备好的语句以及连接池

无法使用准备好的语句从数据库中提取密码哈希

准备好的语句不能用整数值多次执行

带有准备好的语句的 SELECT 的 JSON 输出

在 PHP 中到处使用准备好的语句? (PDO)