##やりたいこと
HTML(Vue.js使用)からPHPを経由して、SQLのデータを取得したいと考えています。
問題の事象
axiosを使用して、一応JSONデータを取得して表示することができたのですが、同じカラムが二つ取得されてしまいます。一つはカラム番号(0, 1, 2など)、もう一つはカラム名(id, name, created_atなど)です。
説明が難しいので、以下の「表示結果」をみていただければと思います。
表示結果
{ "0": "1", "1": "あいうえお", "2": "2021-02-05 14:33:51", "id": "1", "name": "あいうえお", "created_at": "2021-02-05 14:33:51" }
{ "0": "2", "1": "かきくけこ", "2": "2021-02-05 14:41:54", "id": "2", "name": "かきくけこ", "created_at": "2021-02-05 14:41:54" }
{ "0": "3", "1": "さしすせそ", "2": "2021-02-05 14:33:51", "id": "3", "name": "さしすせそ", "created_at": "2021-02-05 14:33:51" }
##コード
html
1<!DOCTYPE HTML> 2<html> 3<head> 4 <meta charset="utf-8"> 5 <title>SQLの値をJSONで取得</title> 6</head> 7<body> 8 <div id="app"> 9 <button @click="show()">JSONを表示</button> 10 <div v-for="itm in posts"> 11 <p>{{ itm }}</p> 12 </div> 13 </div> 14 <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script> 15 <script src="https://unpkg.com/axios/dist/axios.min.js"></script> 16 <script> 17 new Vue({ 18 el: '#app', 19 data: { 20 posts: null 21 }, 22 methods: { 23 show: function() { 24 let self = this 25 axios.get('http://localhost:88/php/list.php').then(function (response) { 26 self.posts = response.data 27 }).catch((error) => { 28 console.log(error) 29 }) 30 } 31 } 32 }) 33 </script> 34</body> 35</html>
sql
1// mydb > memos 2id | name | created_at 31 | あいうえお | 2021-02-05 14:33:51 42 | かきくけこ | 2021-02-05 14:41:54 53 | さしすせそ | 2021-02-05 14:33:51
php
1<?php 2// SQLに接続する 3try { 4 $db = new PDO('mysql:dbname=mydb; host=xxx.xxx.xxx.xxx; charset=utf8', 'xxxx', 'xxxx'); 5} 6catch(PDOException $e) { 7 echo 'DB接続エラー: ' . $e -> getMessage(); 8} 9 10$memos = $db -> query('SELECT * FROM memos'); 11// 各データを取り出す 12$list = array(); 13foreach ($memos as $memo) { 14 $list[] = $memo; 15} 16echo json_encode($list); 17?>
##実現したいこと
JSONデータの最初の部分「"0": "1", "1": "あいうえお", "2": "2021-02-05 14:33:51",」が、なぜ取得されてしまうのかが分かりません。できれば、後方のカラム名だけのJSONデータを取得したいと思っています。
ご教示のほど、よろしくお願いいたします。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/06 00:29