午前の続き
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