忍者ブログ

からすまる日誌 mySQL

授業ノートのまとめ

高度(25) class(3)

×

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

高度(25) class(3)

idを指定して取り出す
基本的に「ひとつ取り出す」というのは主キーだし主キーであるべき
重なってると面倒なことになる
 


ここ全体がpdoなのでさらに->でプリペアー
 

 public function getMenubyId($id=1){ //指定したid番号を取得、引き取るid番号が仮引数の$id
  $sql="SELECT * FROM foods WHERE id=:id";
  $stmt = $this->pdo->prepare($sql);
  $stmt->bindvalue(":id",$id,PDO::PARAM_INT);
  $stmt->execute();
  $row = $stmt->fetch(PDO::FETCH_ASSOC);
  return $row;
 }

$row = $obj->getMenuById(2);
中略
   <p>
    <?php print_r( $row); ?>
   </p>


idの2番を呼び出すのだが、
メソッドの中のパラメータに値を代入(public function getMenubyId($id=1))すると
「デフォルト値」としてphpでは扱われる
仮に呼び出し元で何の指定もなければこれ(id=1)が採用されるし、
なにか指定があればちゃんとid=2をとってくる
 

insert
update
deleteも追加
 <?php foreach($arr as $val): ?>
      <li><a href="form.php?id=3"><?php echo $val["menu"]; ?></a></li>
      
     <?php endforeach; ?>
 
こんな風にしたい
これだと全部id=3になってしまうので、

<a href="form.php?id=<?php echo $val["id"]; ?>">
 
hoverするとここにちゃんとidがきている
 
ここまで

list.php
 
<?php
require_once("class/lunch.class.php");
$obj = new Lunch();
$arr = $obj->getAllMenu();
//print_r($arr);

//$row = $obj->getMenuById(2);
?>

<!DOCTYPE html>
<html lang="ja">
 <head>
  <meta charset="UTF-8">
  <title>メニューリスト</title>
  <link rel="stylesheet" href="css/style.css">
  <script src="../jquery-3.4.1.min.js"></script>
 </head>
 <body>
  <div id="container">
   <h1>メニューリスト</h1>
   
   <ul id="m_list">

     <!--方法1一番外側の階層([0~20])をぐるぐる回すよ、その中身をvalとするよ-->

     <?php foreach($arr as $val): ?>
      <li>
       <a href="form.php?id=<?php echo $val["id"]; ?>">
       <?php echo $val["menu"]; ?></a>
      </li>
      
     <?php endforeach; ?>
     
     <!--方法2 count関数を使う
     
     <?php for($i=0; $i<count($arr); $i++): ?>
     <li><?php echo($arr[$i]["menu"]); ?></li>
     <?php endfor ?>
     
     -->   
   </ul>
   
   <!--
   <p>
    <?php print_r( $row["menu"]); ?>
   </p>
   -->
   
  </div>
 
 
  <script src="js/lunch.js"></script>  
 </body>
</html>


lunch.class.php
 
<?php
class Lunch{
 private $pdo;//外から直接アクセスはできないように
 
 public function __construct(){//コンストラクタ。初期化されたときに動く
  // -----------------
  //環境によって変更
  // -----------------
 
  $host="localhost";
  $dbuser="root";
  $dbpass="";
  $dbname="lunch";
  // -----------------
 
  $dsn = "mysql:host={$host}; dbname={$dbname}; charset=utf8";
  $this->pdo=new PDO($dsn,$dbuser,$dbpass); //$pdoとは書かない
 
 }//constructの終わり
 
 public function getAllMenu(){//publicでないと外から呼び出せない
  $sql = "SELECT * FROM foods";
  $rs = $this->pdo->query($sql);
  $rows = $rs->fetchAll(PDO::FETCH_ASSOC);
  return $rows;//戻り値
 }
 
 public function getMenubyId($id=1){//指定したid番号を取得、引き取るid番号が仮引数の$id
  $sql="SELECT * FROM foods WHERE id=:id";
  $stmt = $this->pdo->prepare($sql);
  $stmt->bindvalue(":id",$id,PDO::PARAM_INT);
  $stmt->execute();
  $row = $stmt->fetch(PDO::FETCH_ASSOC);
  return $row;
 }
 
 public function setMenu($menu,$price,$c_id){//idはオートインクリメントなので必要ない
  $sql = "INSERT INTO foods(menu,price,c_id) VALUES (:menu,:price,:c_id)";//メニューと値段とカテゴリidを追加
  $stmt = $this->pdo->prepare($sql);//クラス内の変数なのでstmtやsqlのスコープはここだけ
  $stmt->bindvalue(":menu",$menu,PDO::PARAM_STR);
  $stmt->bindvalue(":price",$price,PDO::PARAM_INT);
  $stmt->bindvalue(":c_id",$c_id,PDO::PARAM_INT);
  $stmt->execute();
  //戻り値は要らない
 }
 
 public function updateMenu($menu,$price,$c_id,$id){//どれがupdateされるか分からないので3つとも仮引数を用意
  //主キーである$idがないと全部書き換わってしまうのでどこのレコードか指定するため今回4つプロパティが要る
 
  $sql = "UPDATE foods SET menu=:menu, price=:price, c_id=:c_id WHERE id=:id";
  $stmt = $this->pdo->prepare($sql);
  $stmt->bindvalue(":menu",$menu,PDO::PARAM_STR);
  $stmt->bindvalue(":price",$price,PDO::PARAM_INT);
  $stmt->bindvalue(":c_id",$c_id,PDO::PARAM_INT);
  $stmt->bindvalue(":id",$id,PDO::PARAM_INT);//idも必要ですよ
  $stmt->execute();
 
 }
 
 public function deleteMenu($id){//パラメータは主キーであるidだけでいい
  $sql = "DELETE FROM foods WHERE id=:id";
  $stmt = $this->pdo->prepare($sql);
  $stmt->bindvalue(":id",$id,PDO::PARAM_INT);
  $stmt->execute();
 
 }
 
}
?>

PR

コメント

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

プロフィール

HN:
karasumaru
性別:
非公開

P R