2014年11月11日火曜日

?日目 PHP SQL 「PDO」でデータベースへ接続する

とても眠い!!が、今日の授業メモ。


  • PDO(ピーディーオー)

昨今ではDBに対して"PDO"で接続することを推奨している。

クラス構造になっている??
PDO = PHP Data Object

http://php.net/manual/ja/book.pdo.php

MySQLの版権を持つメーカーオラクル。

しばらく無償でを提供すると言っているが、将来有償化することも起こりえる。
そのとき、今まで使っていた関数 mysql~が使えなくなる?!

そこでPDOを導入。
このクラスのオブジェクトを生成すると、
宣言(接続の定義)さえすれば、
指定したDBに対して自動的に接続してくれる。
長い目で見て継続するサービスはPDOにした方がいいかも。

○特徴:セキュア

プレースホルダー
sprintfを使って個別にサニタイズしていたが(mysql_real_string...とかで)
その必要がなくなる。

○postgreSQL
 (ポストグレ エスキューエル)
 PCUNIX上で動作するオープンソースのデータベース

○MySQLはオラクルが版権を握ってしまった。

○つなぎ方
$dsn="mysql:dbname=foods;host=localhost"
 
 3つのデータを入れる
 使うDB名、DBネーム(goodsとか)、サーバー名(sakuraとか)

  • try 例外処理

try{
     &pdo=new PDO($dsn,$user,$password);
}$catch(PDOException $e){
     print("接続失敗".$e->getMessage());
     exit();
}

○クエリの実行もメソッド
PDOオブジェクトが持っているクエリというメソッドを使って
引数としてSQL文を渡す。
$stmt = $pdo->query("set names utf8;");
$stmt =$pdo->prepare("select * from データベース名where フィールド名1=? and フィールド名2=?");
$stmt->execute(array(2,"%テキスト%"));
while($row=$stmt->fetch(PDO::FETCH_ASSOC)){
     print("<p>".$row["item_name"]."☆".$row["price"]."</p>";
}
$pdo=null;
?>


     $stmt(ステートメント)
     上で予約、下で値を入れる
     prepare...sprintfに該当するもの。
     executeメソッドで値をバインド!!(代入)
     「?」に値をもたせられる。

     単純にテキストが入るのではなく、コンパイルされている。


※$eというオブジェクトが持っているgetMessage()というメソッドが使える
 例外を検知したときは$eというオブジェクトとして取り扱う
 foreachみたいなもの。
 例外が発生したら、$eというオブジェクトが持っているgetMessage()というメソッドを実行。


(PDO::FETCH_ASSOC)
 突然のダブルコロン→PDOのプロパティ
アロー演算を使って呼び出してくる筋の物

オブジェクトを生成しなくても静的に呼び出せる。
newしなくってもメソッドを呼び出せる。

$pdo=null; でサーバー上のメモリを削除する。
 これをしないとずっとプールし続ける。

2014年11月5日水曜日

80日目?|htmlの定義リスト

今日も引き続き課題を進めました。
最終日にプレゼンをやるそうで、プレシャーだと嘆いている人もいれば、
良いプレゼンをやりたいと意気込んている人も。

今日学んだこと


  • <dl>定義リストいろいろ使えるので便利。
    先生は<li>のリストよりもこちらをよく使う。
     
  • CSSを使えば横並びにできる







CSSでの注意点。
「float:left」を使うことになるので、次の要素がきたときにはcrear(解除するプロパティ)を忘れないこと。
「clear:left;」で上の要素の「left」を解除する。
また、「clear:both」ならば上下左右すべてのfloatを解除する。

ラインがそろっている →親子関係もわかりやすくなる。

・ 汎用性の高い横並びdlリストを作る

・ HTML要素 コンテンツのグループ化 dl 要素dl要素(html5.jp)
ここのこの記述、何度読んでもちょっと謎・・・。
もし dl 要素が 1 つ以上の dt 要素を子に持ちながらも、dd 要素を子に持たなければ、それは、名前はあるけれども値がないひとつのグループから構成されることになります。
もし dl 要素が 1 つ以上の dd 要素を子に持ちながらも、dt 要素を子に持たなければ、それは、値はあるけれども名前がないひとつのグループから構成されることになります。
dl 要素の最初の子は dt 要素か dd 要素となりますが、それが dd 要素なら、その最初のグループはそれに対応する名前を持ちません。
dl 要素の最後の子は dt 要素か dd 要素となりますが、それが dt 要素なら、その最後のグループはそれに対応する値を持ちません。

2014年11月2日日曜日

メモ・foreach

連日PHPを勉強しています。

「foreach」と仲良くなれない。
何だっけ?と思い出して、昔のメモを読んで理解したような気になって、また忘れる・・・。


書き方

     -1- foreachi(配列名 as $key=>$val){
             処理
         }

     -2- foreachi(配列名 as $val){
             処理;
         }



  • $key →配列のキー(インデックス)
  • $val →配列の値。別にどんな単語でも良いけどvalを使うのが基本
  • =>(ダブルアロー)配列のキーと値を関連付ける特殊記号。
      
    javascriptのドットと同じ。親要素と子要素をつなぐ。



Foreach文 - Wikipedia [はてなブックマークで表示]ja.wikipedia.org/wiki/Foreachforeach文(フォーイーチぶん)とはプログラミング言語においてリストやハッシュテーブルなどのデータ構造の各要素に対して与えられた文の実行を繰り返すというループを記述するための文である。foreach文はしばしばfor文の一部という位置付けにある。for文と ...

たどり着いた解説が分かりやすかったので引用。
こんな風にユーモアを交えて解説できる人は天才だと思う。
公式のマニュアルも読むけど、今の自分にはまだ難しいのです。

・foreachの使い方がよくわからないので教えてください - PHPプロ!Q&amp;A掲示板

【質問】
今独学でPHPを勉強してるんですけどforeachの使い方がよくわかりません。foreachはどんな時に使えるのか教えてください(for文とは違うんですよね?)。特に$key(一時変数?)と書いてありますけど配列のキーが入ってそれをどういう風に使えるのかがよくわかりません。あまりに抽象的な質問ですみませんが教えてください。

【回答】 
配列全部に対して処理を行う時に一番良く使うのがforeach。
$aa[0]='(゚Д゚ )';$aa[1]='( ・∀・)';という配列があったとき
foreach ($aa as $value){ echo $value."ゴルァ";}とやると、$aa[0],$aa[1]の2回分ブロック内が処理される。そのとき$aaの中身が$valueに入って処理される。

この場合結果は
(゚Д゚ )ゴルァ( ・∀・)ゴルァ
すっきり。
foreachは配列を取り出すのに使うループ処理の文。
配列の中に存在するデータの数だけ自動ループ…ということかな。
配列だけではなくてオブジェクトにも使えるらしい。

練習でforeachが出てきたのは「フォームからPOSTされたデータを取り出す」ところでした。

<?php
foreach($_POST["test"] as $val){
$val=intval($val);       ←この処理を$_POST["test"]にある数だけ回す
print($val. "です");      
}
?>