忍者ブログ

からすまる日誌 mySQL

授業ノートのまとめ

基本(14) データベースのデータをjson形式に

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

基本(14) データベースのデータをjson形式に

午前の続き 
 
foods_api.php

Notice: Undefined variable: execute in C:\xampp\htdocs\php\makino\school\foods_api.php on line 16
 
Fatal error: Uncaught Error: Method name must be a string in C:\xampp\htdocs\php\makino\school\foods_api.php:16 Stack trace: #0 {main} thrown in C:\xampp\htdocs\php\makino\school\foods_api.php on line 16
 
がっつりエラーがでましたが、executeが変数と思われているらしい
 
Undefined variable(変数が定義されてないよ~)
$stmt->$execute();になっていた
正解はexecute();
そもそもexecuteがサクラエディタで色がつかなかった時点で疑うべき。
$executeとミススペルすると色がつかないようだ。
 

ブラウザのURLにこれをいれて確かめましょう:
http://localhost/php/makino/school/foods_api.php?p_id=3
 
→実行
Array ( [0] => Array ( [f_id] => 6 [food] => 明石焼き [p_id] => 3 ) [1] => Array ( [f_id] => 7 [food] => 神戸牛 [p_id] => 3 ) [2] => Array ( [f_id] => 8 [food] => ゴーフル [p_id] => 3 ) )
 
多次元配列で吐き出された。
なんでこれf_idの6,7,8だけが吐き出されたかというと、URLが?p_id=3にしたので。
p_idが3であるデータのみが吐き出された訳です。
 
  
--->foods_api.php
<?php
if(empty($_GET["p_id"])){
 exit();//処理を停止
}
 $user="root";
 $pass="";
 $host="localhost";
 $dbname="school";
 $dsn="mysql:host={$host};dbname={$dbname};charset=utf8";
 $pdo = new PDO($dsn,$user,$pass);
 $sql="SELECT * FROM foods WHERE p_id=:p_id";
 $stmt=$pdo->prepare($sql);
 
 $stmt->bindValue(":p_id", $_GET["p_id"],PDO::PARAM_INT);
 $stmt->execute();
 $foods = $stmt->fetchAll(PDO::FETCH_ASSOC);//連想配列としてフェッチした結果を受け取る
 print_r($foods);
?>
エラーでトークンが出たら、閉じ忘れをまず疑うとよろしい
 

配列をエンコード
 
マニュアルを見ましょう
 
json_encode
配列のままではjavaScriptに渡せないので、このジェイソンエンコードというのを使う
 
マニュアルの見方:
変更履歴はみなくてよろしい
関数だから丸括弧で囲われている

しかしそのあと:コロンが書いてある
これは戻り値の型を記してあるだけで、構文に必要ではない
緑色で書かれているのは全部データ型
 
[]で囲われている中は「オプション」。設定しなくてもよろしいの意。
つまりひとつは引数がいると書いてある。
mixed:特定の型を想定しておりません
 
私たちが使うときはここは配列or多次元配列になるだろうと。
 
配列の形式を一気にジェイソンの形式に書き換えてくれる。と書いてある。
 
[#IMAGE|a0396706_14040990.png|202001/31/06/|mid|640|615#]

  
 
--->foods_api.php
 
<?php
if(empty($_GET["p_id"])){
 exit();//処理を停止
}
 $user="root";
 $pass="";
 $host="localhost";
 $dbname="school";
 $dsn="mysql:host={$host};dbname={$dbname};charset=utf8";
 $pdo = new PDO($dsn,$user,$pass);
 $sql="SELECT * FROM foods WHERE p_id=:p_id";
 $stmt=$pdo->prepare($sql);
 
 $stmt->bindValue(":p_id", $_GET["p_id"],PDO::PARAM_INT);
 $stmt->execute();
 $foods = $stmt->fetchAll(PDO::FETCH_ASSOC);//連想配列としてフェッチした結果を受け取る
 //$foods[0]["p_id"],$foods[0]["food"];
 print_r($foods);
 $json = json_encode($foods);
 echo $json;
?>
--->出力結果
 
Array ( [0] => Array ( [f_id] => 6 [food] => 明石焼き [p_id] => 3 ) [1] => Array ( [f_id] => 7 [food] => 神戸牛 [p_id] => 3 ) [2] => Array ( [f_id] => 8 [food] => ゴーフル [p_id] => 3 ) ) [{"f_id":"6","food":"\u660e\u77f3\u713c\u304d","p_id":"3"},{"f_id":"7","food":"\u795e\u6238\u725b","p_id":"3"},{"f_id":"8","food":"\u30b4\u30fc\u30d5\u30eb","p_id":"3"}]
 
日本語が変換されてるのでえらいことになってるが
これはなんとかなるらしいのでOK
 
PR

コメント

ただいまコメントを受けつけておりません。

プロフィール

HN:
karasumaru
性別:
非公開

P R