<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/swdp2p2/">
    <title>Software Design Practice 2@ ウィキ</title>
    <link>http://w.atwiki.jp/swdp2p2/</link>
    <atom:link href="https://w.atwiki.jp/swdp2p2/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>Software Design Practice 2@ ウィキ</description>

    <dc:language>ja</dc:language>
    <dc:date>2008-12-04T04:33:51+09:00</dc:date>
    <utime>1228332831</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/swdp2p2/pages/17.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/swdp2p2/pages/1.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/swdp2p2/pages/2.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/swdp2p2/pages/13.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/swdp2p2/pages/12.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/swdp2p2/pages/15.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/swdp2p2/pages/11.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/swdp2p2/pages/10.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/swdp2p2/pages/9.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/swdp2p2/pages/8.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/swdp2p2/pages/17.html">
    <title>Column</title>
    <link>https://w.atwiki.jp/swdp2p2/pages/17.html</link>
    <description>
      #contents()


*コラム
**テーブルの中身を表示する

　[[PHP]]を使ってMySQLのあるテーブルの内容を出力するというプログラムを書いてみたいと思います。
　データベースの仕様として、テーブル名は&amp;bold(){member}、キーは、&amp;bold(){id(主キー), name, pass}の3つとします。

　まず最初にデータベースにテーブルを作成します。以下のようなSQL文を入力します。
 CREATE  TABLE IF NOT EXISTS `test`.`member` (
   `id` INT NOT NULL ,
   `name` VARCHAR(45) NOT NULL ,
   `pass` TEXT NOT NULL ,
   PRIMARY KEY (`id`) )
 ENGINE = InnoDB

　次に、作成したテーブルにデータを挿入していくのですが、今回は試用ですので、直にSQL文で打ち込みます。
 insert into member value(1, &#039;tester1&#039;, &#039;hogehoge1&#039;);
 insert into member value(2, &#039;tester2&#039;, &#039;hogehoge2&#039;);
 insert into member value(3, &#039;tester3&#039;, &#039;hogehoge3&#039;);
 insert into member value(4, &#039;tester4&#039;, &#039;hogehoge4&#039;);
 insert into member value(5, &#039;tester5&#039;, &#039;hogehoge5&#039;);

　テーブルにデータが挿入されているか確認をします。
 mysql&gt; select * from member;
 +----+---------+-----------+
 | id | name    | pass      |
 +----+---------+-----------+
 |  1 | tester1 | hogehoge1 |
 |  2 | tester2 | hogehoge2 |
 |  3 | tester3 | hogehoge3 |
 |  4 | tester4 | hogehoge4 |
 |  5 | tester5 | hogehoge5 |
 +----+---------+-----------+
 5 rows in set (0.00 sec) 

　これでMySQL側の作業は終了です。
　さて、今度はPHPでプログラムを書いていきたいと思います。
　内容の表示であるView部分はSmartyテンプレートを使用します。
　今回使用したテンプレート(ShowSqlInfo.tpl)の中身は以下になります。
 &lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot; &quot;http://www.w3.org/TR/html4/loose.dtd&quot;&gt;
 &lt;html&gt;
 &lt;head&gt;
 &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=windows-31j&quot;&gt;
 &lt;META http-equiv=&quot;Content-Style-Type&quot; content=&quot;text/css&quot;&gt;
 &lt;title&gt;データベースの内容&lt;/title&gt;
 &lt;/head&gt;
 &lt;body&gt;
 
 &lt;h2&gt;データベースの詳細&lt;/h2&gt;
 &lt;table border=&quot;1&quot;&gt;
 	&lt;tr&gt;
 		&lt;td&gt;id&lt;/td&gt;
 		&lt;td&gt;user&lt;/td&gt;
 		&lt;td&gt;pass&lt;/td&gt;
 	&lt;/tr&gt;
 	{* データの挿入 *}
 	{foreach from=$data key=&quot;key&quot; item=&quot;value&quot; name=&quot;list&quot;}
 	&lt;tr&gt;
 		&lt;td&gt;{$value-&gt;GetId()}&lt;/td&gt;
 		&lt;td&gt;{$value-&gt;GetUserName()}&lt;/td&gt;
 		&lt;td&gt;{$value-&gt;GetPass()}&lt;/td&gt;
 	&lt;/tr&gt;
 	{foreachelse} {/foreach}
 	
 &lt;/table&gt;
 &lt;/body&gt;
 &lt;/html&gt;

　最後に、PHPにおける処理部分ですが、データベースの内容を示すクラスを一つ定義しました。
　あとは、[[PHP]]でやった内容と変わらず、while文ですべての内容を取得しています。
 &lt;?php
 // MySqlの内容を表示するphp
 
 require_once &quot;MDB2.php&quot; ;
 require_once &quot;DBInfo.php&quot;;
 require_once &quot;Smarty/smarty.class.php&quot;;
 
 // Smartyオブジェクトの生成
 function CreateSmartyObj()
 {
 	$smarty = new Smarty();
 
 	// パスの設定
 	$smarty-&gt;template_dir = &quot;template&quot;; // テンプレートディレクトリのパス
 	$smarty-&gt;compile_dir = &quot;compile&quot;; 	// コンパイルディレクトリのパス
 
 	return $smarty;
 }
 
 // データベースへ接続
 $mdb2 = MDB2::connect( &quot;mysqli://ユーザ名:パスワード@ホスト/member&quot; );
 
 // エラー処理
 if(PEAR::isError($mdb2))
 {
    die($mdb2-&gt;getMessage());
 }
 
 // クエリ実行
 $sql = &quot;select * from member&quot;;
 $res =&amp; $mdb2-&gt;query($sql);
 
 // エラー処理
 if(PEAR::isError($res))
 {
    die($res-&gt;getMessage());
 }
 
 $ary = array();
 
 while( ( $row = $res-&gt;fetchRow() ) )
 {
 	$tmp = new CDBInfo();
 	
 	$tmp-&gt;SetId($row-&gt;id);
 	$tmp-&gt;SetUserName($row-&gt;name);
 	$tmp-&gt;SetPass($row-&gt;pass);
 	
 	array_push($ary, $tmp);
 }
 // データベースへの接続を切る
 $mdb2-&gt;disconnect(); 
 
 $smarty = CreateSmartyObj();
 $smarty-&gt;assign(&quot;data&quot;, $ary);
 $smarty-&gt;display(&quot;ShowSqlInfo.tpl&quot;);
 
 ?&gt;

　DBInfo.php
 &lt;?php
 
 class CDBInfo
 {
 	protected $m_Id;		// ユーザid
 	protected $m_Name;		// ユーザ名
 	protected $m_Pass;		// パスワード
 	
 	function __construct()
 	{
 		$m_Id = 0;
 		$m_Name = NULL;
 		$m_Pass = NULL;
 	}	
 	
 	public function SetId($id)
 	{
 		$this-&gt;m_Id = $id;
 	}
 	
 	public function GetId()
 	{
 		return $this-&gt;m_Id;
 	}
 	
 	public function SetUserName($name)
 	{
 		$this-&gt;m_Name = $name;
 	}
 	
 	public function GetUserName()
 	{
 		return $this-&gt;m_Name;
 	}
 
 	public function SetPass($pass)
 	{
 		$this-&gt;m_Pass = $pass;
 	}
 	
 	public function GetPass()
 	{
 		return $this-&gt;m_Pass;
 	}
 }
 ?&gt;

**データベースクラスを作ってみる

　PEARのMDB2ライブラリを用いたデータベースを扱う簡易クラスを作ってみたいと思います。
　いちいち、エラーチェックや決まった変数を毎度作成するのは面倒というものです。
　こういった使用するものが決まったものの集まりをクラスにしてしまいましょう。

　毎回出てくる変数としては、データベースに接続する変数($mdb2、$db等)と、クエリの結果を受け取る変数($res等)をクラス内に定義してしまいましょう。
 class DBAccess
 {
 	protected $m_Db;	// データベース接続変数
 	protected $m_Result;	// クエリ用変数
 }

　protectedすることでクラスのメンバ変数は外部からアクセスできないようになっています。(継承先は除く)

***接続の手間を省く

　まず、ログインする関数を作りましょう。
　定数として以下のものを用意します。
 const m_Sql 	= &quot;mysqli&quot;;	// 使用するSQL
 const m_User 	= &quot;ユーザ名&quot;;	// ユーザ名
 const m_Pass 	= &quot;パスワード&quot;;	// パスワード
 const m_Host 	= &quot;localhost&quot;;	// ホスト名
 const m_DbName 	= &quot;DB名&quot;;	// データベース名
 const m_TblName	= &quot;テーブル名&quot;;	// テーブル名

　クラス内の定数にはself::m_Sqlのようにself::を用いアクセスします。
　では、コネクト関数を実装します。
 // データベース接続
 public function Connect()
 {
 	// 接続文字列を作成
 	$str = sprintf(&quot;%s://%s:%s@%s/%s&quot;, 
 		self::m_Sql, self::m_User, self::m_Pass, self::m_Host,  self::m_DbName);
 
 	// 接続処理
 	$this-&gt;m_Db =&amp; MDB2::connect($str);
 	
 	// エラー処理
 	if( PEAR::isError( $this-&gt;m_Db ) ) 
 	{
 		exit(&quot;以下の接続が失敗しました&lt;br&gt;&quot; .$str);	
 	}
 }

　このコネクト関数をコンストラクタで呼び出してやれば、クラスを生成するだけで接続でき便利です。
 // コンストラクタ
 function __construct()
 {
 	// メンバ変数の初期化
 	$this-&gt;m_Db = NULL;
 	$this-&gt;m_Result = NULL;
 	
 	// 接続
 	$this-&gt;Connect();
 }

***切断の処理も省く

　上記の接続と同様ですので、プログラムのみ示します。
 // データベース切断
 public function DisConnect()
 {
 	$this-&gt;m_Db-&gt;disconnect();
 }

 // デストラクタ
 function __destruct()
 {
 	if($this-&gt;m_Db != NULL)
 	{
 		$this-&gt;DisConnect();
 	}
 }

***使用する処理を実装する

　最低限ということで、クエリを実行する関数(Query)、レコードを取得する関数(FetchRow)、クエリ結果のレコード数を取得する関数(numRow)を用意しました。
　実装は非常に簡単です。今までやってきたことをクラス内に内包しているだけです。
 // レコードを取得し返す
 public function FetchRow()
 {
 	$this-&gt;Error();
 	return $this-&gt;m_Result-&gt;fetchRow(MDB2_FETCHMODE_OBJECT);
 }
 // クエリ結果のレコード数を返す
 public function numRows()
 {
 	$this-&gt;Error();
 	return $this-&gt;m_Result-&gt;numRows();
 }
 // クエリ実行
 public function Query($sql)
 {
 	// クエリの実行し結果を取得
 	$this-&gt;m_Result =&amp; $this-&gt;m_Db-&gt;query($sql);
 	
 	// エラー処理
 	if( PEAR::isError($this-&gt;m_Result) )
 	{
 		exit(&quot;以下のクエリが失敗しました&lt;br&gt;&quot; .$sql);
 	}
 }

　今回作成したプログラムは以下になります。
　[[DBAccess.php&gt;http://www36.atwiki.jp/swdp2p2?cmd=upload&amp;act=open&amp;pageid=17&amp;file=DBAccess.php]]    </description>
    <dc:date>2008-12-04T04:33:51+09:00</dc:date>
    <utime>1228332831</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/swdp2p2/pages/1.html">
    <title>トップページ</title>
    <link>https://w.atwiki.jp/swdp2p2/pages/1.html</link>
    <description>
      *Software Design Practice 2@wikiへようこそ
このwikiはPHP&amp;mySQLを勉強するためのページです。
このwikiはプログラミングを勉強されたことがある方が対象になっていますので、
基本的な事は書かれていない場合が多いです。(PHPの設置方法,オブジェクト指向等)
そちらに関しては必要な方は各自調べていただくと言う形でお願いします。
また、このwikiに載せていただいてもかまいません。

-PHP&amp;MySQLの環境が整っていない方は[[こちら&gt;環境作成]]
-PHPについて勉強したい方は[[こちら&gt;PHP]]
-PHPのソースを載せる場合は[[PHPCodeChanger&gt;http://mysmusa.com/uplo/phpcodechanger.zip]]


**@wiki助け合いコミュニティの掲示板スレッド一覧
#atfb_bbs_list(112)    </description>
    <dc:date>2008-12-04T03:35:41+09:00</dc:date>
    <utime>1228329341</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/swdp2p2/pages/2.html">
    <title>メニュー</title>
    <link>https://w.atwiki.jp/swdp2p2/pages/2.html</link>
    <description>
      -[[トップページ]]
-[[環境作成]]
-[[PHP]]
-[[Column]]
-[[テンプレ]]
----

**リンク
-[[@wiki&gt;&gt;http://atwiki.jp]]
-[[@wikiご利用ガイド&gt;&gt;http://atwiki.jp/guide/]]

----

**更新履歴
#recent(20)
アクセス数:&amp;counter(total)

&amp;link_editmenu(text=ここを編集)    </description>
    <dc:date>2008-12-04T03:35:14+09:00</dc:date>
    <utime>1228329314</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/swdp2p2/pages/13.html">
    <title>PHP</title>
    <link>https://w.atwiki.jp/swdp2p2/pages/13.html</link>
    <description>
      #contents

*PHP
**基礎知識
***文字列の結合
|&amp;color(blue){ &lt;?php }&amp;br()&amp;color(blue){ $a = } &amp;color(green){ &quot;ポアソン&quot; } &amp;color(blue) { ; }&amp;br()&amp;color(blue){ $b = } &amp;color(green){ &quot;分布&quot; } &amp;color(blue) { ; }&amp;br()&amp;br()&amp;color(orange){ // $aと$bを結合する }&amp;br()&amp;color(blue){ $c = $a . $b; }&amp;br()&amp;br()&amp;color(orange){ // 結果の出力 }&amp;br()&amp;color(blue){ print($c); }&amp;br()&amp;color(blue){ ?&gt; }|
 文字列を結合するには.(ドット)を用います。文字列の結合は複数でも可能です。
|&amp;bold(){出力結果}&amp;br()ポアソン分布|

***関数定義

 関数はfunction 関数名(引数){記述文}で定義できます。
　返り値の型がない代わりにfunctionがついたC言語の関数と考えれば特に難しくはありません。
　関数の例は以下のとおりです。
|&amp;color(blue){ &lt;?php }&amp;br()&amp;color(orange){ // 文字列の出力関数 }&amp;br()&amp;color(blue){ function Disp($string) }&amp;br()&amp;color() { { }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ print($string); }&amp;br()}&amp;br()&amp;br()&amp;color(orange){ // 文字列を返す関数 }&amp;br()&amp;color(blue){ function GetString() }&amp;br()&amp;color() { { }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ $string = } &amp;color(green){ &quot;GetStringの文字列&quot; } &amp;color(blue) {  }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ return $string; }&amp;br()}&amp;br()&amp;color(blue){ ?&gt; }|

***条件文のtrueとfalseの省略記述

　システムにより依存はありますが、基本的にtrue = 0以外, false = 0です。
　if文などでよく if($isExist){...} などと変数名(ここでいう$isExist)のみの記述があります。
　これは、$isExistがtrueならば実行すると言う意味です。
　この意味はwhile文の無限ループを思い出してもらえれば簡単だと思います。
　無限ループは、while(1){...} のように記述します。別に条件文が1である必要はありません。0以外の数値であればよいのです。
　つまり、これはwhile(true)を意味しています。
　ですので、$isExistがtrueの場合、if($isExist){...} は if(true){...}と解釈されます。

**MDB2
***データベースへの接続
|&amp;color(blue){&lt;?php} &amp;br() &amp;color(orange){// ライブラリの読込み} &amp;br() &amp;color(blue){require_once} &amp;color(green){&quot;MDB2.php&quot;} &amp;color(blue){;} &amp;br()&amp;br() &amp;color(orange){// データベースへ接続 } &amp;br() &amp;color(blue){$mdb2 = MDB2::connect(} &amp;color(green){&quot;mysql://ユーザ名:パスワード@ホスト/データベース名&quot;} &amp;color(blue){); } &amp;br() &amp;color(orange){// エラー処理} &amp;br() &amp;color(blue){if(PEAR::isError($mdb2))} &amp;br() &amp;color(){{} &amp;br() &amp;color(blue){&amp;nbsp;&amp;nbsp; die($mdb2-&gt;getMessage());} &amp;br() } &amp;br()&amp;br() &amp;color(orange){// データベースへの接続を切る } &amp;br() &amp;color(blue){$mdb2-&gt;disconnect(); } &amp;br() &amp;color(blue){?&gt;}|

***データの取得
|&amp;color(blue){&lt;?php} &amp;br() &amp;color(orange){// ライブラリの読込み} &amp;br() &amp;color(blue){require_once} &amp;color(green){&quot;MDB2.php&quot;} &amp;color(blue){;} &amp;br()&amp;br() &amp;color(orange){// データベースへ接続 } &amp;br() &amp;color(blue){$mdb2 = MDB2::connect(} &amp;color(green){&quot;mysql://ユーザ名:パスワード@ホスト/データベース名&quot;} &amp;color(blue){); } &amp;br() &amp;color(orange){// エラー処理} &amp;br() &amp;color(blue){if(PEAR::isError($mdb2))} &amp;br() &amp;color(){{} &amp;br() &amp;color(blue){&amp;nbsp;&amp;nbsp; die($mdb2-&gt;getMessage());} &amp;br() } &amp;br()&amp;br() &amp;color(orange){// クエリを実行} &amp;br() &amp;color(blue){$res =&amp; $mdb2-&gt;query(} &amp;color(green){&quot;SELECT * FROM データベース名&quot;} &amp;color(blue){);} &amp;br() &amp;color(orange){// エラー処理} &amp;br() &amp;color(blue){if(PEAR::isError($res))} &amp;br() &amp;color(){{} &amp;br() &amp;color(blue){&amp;nbsp;&amp;nbsp; die($res-&gt;getMessage());} &amp;br() } &amp;br()&amp;br() &amp;color(orange){// テーブルの最初の要素を出力する} &amp;br() &amp;color(blue){while( ($row = $res-&gt;fetchRow()) )} &amp;br() &amp;color(){{} &amp;br() &amp;color(blue){&amp;nbsp;&amp;nbsp; print($row[0].} &amp;color(green){&quot;&lt;br&gt;&quot;} &amp;color(blue){);} &amp;br() } &amp;br()&amp;br() &amp;color(orange){// データベースへの接続を切る } &amp;br() &amp;color(blue){$mdb2-&gt;disconnect(); } &amp;br() &amp;color(blue){?&gt;}|
 テーブルの要素を求めるにはqueryを使用します。
 $res = $mdb2-&gt;query(&quot;SELECT 必要な情報を取り出す記述&quot;);
　上記の例では全ての要素を取り出しています。
　また、while文では1行ずつ要素を取り出し、1列目の要素を出力しています。
　この配列の表記法($row[0],$row[4]等)の他に、文字列による表記法も存在します。
　これを連想配列といいます($row[&quot;angle&quot;], $row[&quot;apple&quot;]等)。
|&amp;color(orange){// テーブルの最初の要素を出力する} &amp;br() &amp;color(blue){while( ($row = $res-&gt;fetchRow(MDB2_FETCHMODE_ASSOC)) )} &amp;br() &amp;color(){{} &amp;br() &amp;color(blue){&amp;nbsp;&amp;nbsp; print($row[} &amp;color(green){&quot;id&quot;} &amp;color(blue){].} &amp;color(green){&quot;&lt;br&gt;&quot;} &amp;color(blue){);} &amp;br() }|
　データベースの行の要素を連想配列で取り出す場合は、$res-&gt;fetchRow()の引数にMDB2_FETCHMODE_ASSOCをいれます。
　引数を指定しない場合は、デフォルトとしてMDB2_FETCHMODE_ORDERED が入ります。

　この他に、MDB2_FETCHMODE_OBJECTとすることでオブジェクトとして要素を取り出せます。
|&amp;color(orange){// テーブルの最初の要素を出力する} &amp;br() &amp;color(blue){while( ($row = $res-&gt;fetchRow(MDB2_FETCHMODE_OBJECT)) )} &amp;br() &amp;color(){{} &amp;br() &amp;color(blue){&amp;nbsp;&amp;nbsp; print($row-&gt;id.} &amp;color(green){&quot;&lt;br&gt;&quot;} &amp;color(blue){);} &amp;br() }|

***データの書換え
|&amp;color(blue){&lt;?php} &amp;br() &amp;color(orange){// ライブラリの読込み} &amp;br() &amp;color(blue){require_once} &amp;color(green){&quot;MDB2.php&quot;} &amp;color(blue){;} &amp;br()&amp;br() &amp;color(orange){// データベースへ接続 } &amp;br() &amp;color(blue){$mdb2 = MDB2::connect(} &amp;color(green){&quot;mysql://ユーザ名:パスワード@ホスト/データベース名&quot;} &amp;color(blue){); } &amp;br() &amp;color(orange){// エラー処理} &amp;br() &amp;color(blue){if(PEAR::isError($mdb2))} &amp;br() &amp;color(){{} &amp;br() &amp;color(blue){&amp;nbsp;&amp;nbsp; die($mdb2-&gt;getMessage());} &amp;br() } &amp;br()&amp;br() &amp;color(orange){// データベースの内容を変更する} &amp;br() &amp;color(blue){$sql = } &amp;color(green){&quot;update データベース名 set カラム = &quot;} &amp;color(blue){. $mdb2-&gt;quote(セットしたい値, } &amp;color(green){&#039;型&#039;} &amp;color(blue){) .} &amp;color(green){&quot;WHERE 条件&quot;;} &amp;br() &amp;color(blue){$res =&amp; $mdb2-&gt;exec($sql);} &amp;br()&amp;color(orange){// エラー処理} &amp;br() &amp;color(blue){if(PEAR::isError($res))} &amp;br() &amp;color(){{} &amp;br() &amp;color(blue){&amp;nbsp;&amp;nbsp; die($res-&gt;getMessage());} &amp;br() } &amp;br()&amp;br() &amp;color(orange){// データベースへの接続を切る } &amp;br() &amp;color(blue){$mdb2-&gt;disconnect(); } &amp;br() &amp;color(blue){?&gt;}|

***検出数
|&amp;color(blue){ &lt;?php  }&amp;br()&amp;color(orange){ // ライブラリの読込み  }&amp;br()&amp;color(blue){ require_once } &amp;color(green){ &quot;MDB2.php&quot; } &amp;color(blue) {  ;  }&amp;br()&amp;br()&amp;color(orange){ // データベースへ接続  }&amp;br()&amp;color(blue){ $mdb2 = MDB2::connect( } &amp;color(green){ &quot;mysql://ユーザ名:パスワード@ホスト/データベース名&quot; } &amp;color(blue) {  );  }&amp;br()&amp;color(orange){ // エラー処理  }&amp;br()&amp;color(blue){ if(PEAR::isError($mdb2) )  }&amp;br()&amp;color() { { } &amp;color(blue){   }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ die($mdb2-&gt;getMessage() );  }&amp;br()} &amp;color(blue){   }&amp;br()&amp;br()&amp;color(orange){ // クエリを実行  }&amp;br()&amp;color(blue){ $res =&amp; $mdb2-&gt;query( } &amp;color(green){ &quot;SELECT * FROM データベース名 WHERE 条件&quot; } &amp;color(blue) {  );  }&amp;br()&amp;color(orange){ // エラー処理  }&amp;br()&amp;color(blue){ if(PEAR::isError($res) )  }&amp;br()&amp;color() { { }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ die($res-&gt;getMessage() );  }&amp;br()}&amp;br()&amp;br()&amp;color(orange){ // 検出数を出力 }&amp;br()&amp;color(blue){ print(} &amp;color(green){ &quot;条件に合致したものは&quot; } &amp;color(blue) { . $res-&gt;numRows() .} &amp;color(green){ &quot;個でした&quot; } &amp;color(blue) { ); }&amp;br()&amp;br()&amp;color(orange){ // データベースへの接続を切る  }&amp;br()&amp;color(blue){ $mdb2-&gt;disconnect();  }&amp;br()　&amp;color(blue){?&gt;}|

**暗号化
***hash関数
|&amp;color(blue){ &lt;?php }&amp;br()&amp;color(orange){ // 文字列をハッシュ関数で暗号化 }&amp;br()&amp;color(blue){ $hsh = hash(} &amp;color(green){ &quot;アルゴリズム&quot; } &amp;color(blue) { , } &amp;color(green){ &quot;文字列&quot; } &amp;color(blue) { ); }&amp;br()&amp;br()&amp;color(orange){ // 結果を出力 }&amp;br()&amp;color(blue){ print($hsh); }&amp;br()&amp;color(blue){?&gt;}|
　hashで使用できるアルゴリズムは、hash_algos()で見ることができる。
　また、sha1やmd5については突破方法や効率の良い攻撃法が見つかっているため使用は避けた方がよい。

　hash_algos()の出力結果は以下である。
|&amp;color(blue){ Array }&amp;br()&amp;color(blue){ ( }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [0] =&gt; md4 }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [1] =&gt; md5 }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [2] =&gt; sha1 }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [3] =&gt; sha256 }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [4] =&gt; sha384 }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [5] =&gt; sha512 }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [6] =&gt; ripemd128 }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [7] =&gt; ripemd160 }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [8] =&gt; whirlpool }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [9] =&gt; tiger128,3 }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [10] =&gt; tiger160,3 }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [11] =&gt; tiger192,3 }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [12] =&gt; tiger128,4 }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [13] =&gt; tiger160,4 }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [14] =&gt; tiger192,4 }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [15] =&gt; snefru }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [16] =&gt; gost }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [17] =&gt; adler32 }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [18] =&gt; crc32 }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [19] =&gt; crc32b }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [20] =&gt; haval128,3 }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [21] =&gt; haval160,3 }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [22] =&gt; haval192,3 }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [23] =&gt; haval224,3 }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [24] =&gt; haval256,3 }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [25] =&gt; haval128,4 }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [26] =&gt; haval160,4 }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [27] =&gt; haval192,4 }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [28] =&gt; haval224,4 }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [29] =&gt; haval256,4 }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [30] =&gt; haval128,5 }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [31] =&gt; haval160,5 }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [32] =&gt; haval192,5 }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [33] =&gt; haval224,5 }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ [34] =&gt; haval256,5 }&amp;br()&amp;color(blue){ ) }|

***crypt関数
|&amp;color(blue){ &lt;?php }&amp;br()&amp;color(orange){ // 暗号化する }&amp;br()&amp;color(blue){ $cpt = crypt(} &amp;color(green){ &quot;文字列&quot; } &amp;color(blue) { , } &amp;color(green){ &quot;暗号化用文字列&quot; } &amp;color(blue) { ); }&amp;br()&amp;br()&amp;color(orange){ // 結果出力 }&amp;br()&amp;color(blue){ print($cpt); }&amp;br()&amp;color(blue){?&gt;}|
　cryptは、暗号化用文字列saltを指定することで暗号化方式を決定します。
　引数を指定しない場合は標準のDESベースの暗号化となります。
　ですが、標準のDESベースの暗号化の場合、文字列は8文字までしか使用しないため、
　最初の8文字が同じ文字列は同じ暗号文が出力されてしまうので注意が必要です。
　暗号化方式は以下のとおりです。
 暗号化文字列が2文字の場合、標準のDESベース暗号化方式
 暗号化文字列が9文字の場合、拡張のDESベース暗号化方式
 暗号化文字列が12文字で&amp;bold(){$1$}で始まる場合、MD5暗号化方式
 暗号化文字列が16文字で&amp;bold(){$2$}または&amp;bold(){$2a$}で始まる場合、Blowfish暗号化方式

**セッション
***セッションの基本
|&amp;color(blue){ &lt;?php }&amp;br()&amp;color(orange){ // セッション開始 }&amp;br()&amp;color(blue){ session_start(); }&amp;br()&amp;br()&amp;color(orange){ // セッション変数に値を格納 }&amp;br()&amp;color(blue){ $_SESSION[} &amp;color(green){ &quot;num&quot; } &amp;color(blue) { ] = 1; }&amp;br()&amp;color(blue){ $_SESSION[} &amp;color(green){ &quot;char&quot; } &amp;color(blue) { ] = } &amp;color(green){ &#039;c&#039; } &amp;color(blue) { ; }&amp;br()&amp;color(blue){ $_SESSION[} &amp;color(green){ &quot;string&quot; } &amp;color(blue) { ] = } &amp;color(green){ &quot;test&quot; } &amp;color(blue) { ; }&amp;br()&amp;color(blue){ $_SESSION[} &amp;color(green){ &quot;bool&quot; } &amp;color(blue) { ] = true; }&amp;br()&amp;br()&amp;color(orange){ // 変数の破棄 }&amp;br()&amp;color(blue){ unset($_SESSION[} &amp;color(green){ &quot;char&quot; } &amp;color(blue) { ]); }&amp;br()&amp;br()&amp;color(orange){ // セッション変数の破棄 }&amp;br()&amp;color(blue){ session_unset(); }&amp;br()&amp;br()&amp;color(orange){ // セッション終了 }&amp;br()&amp;color(blue){ session_destroy(); }&amp;br()&amp;br()?&gt;|

　セッションは、ページ間に渡って特定のユーザであることを認識させるために用いられます。
　一般に、ユーザがログインしていることを認識させるために使われます。

**Smarty
***Smarty基本
|&amp;color(blue){ &lt;?php }&amp;br()&amp;br()&amp;color(orange){ // Smartyのパスは環境により変わります。(Pearからインストールした場合、このパスになります) }&amp;br()&amp;color(blue){ require_once } &amp;color(green){ &quot;Pearified/Smarty/smarty.class.php&quot; } &amp;color(blue) { ; }&amp;br()&amp;br()&amp;color(orange){ // Smartyオブジェクトの生成 }&amp;br()&amp;color(blue){ function CreateSmartyObj() }&amp;br()&amp;color() { { }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ $smarty = new Smarty(); }&amp;br()&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(orange){ // パスの設定 }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ $smarty-&gt;template_dir = } &amp;color(green){ &quot;template&quot; } &amp;color(blue) { ; } &amp;color(orange){ // テンプレートディレクトリのパス }&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ $smarty-&gt;compile_dir = } &amp;color(green){ &quot;compile&quot; } &amp;color(blue) { ; &amp;nbsp;&amp;nbsp;} &amp;color(orange){ // コンパイルディレクトリのパス }&amp;br()&amp;br()&amp;nbsp;&amp;nbsp;&amp;color(blue){ return $smarty; }&amp;br()}&amp;br()&amp;br()&amp;br()&amp;color(blue){ $smarty = CreateSmartyObj();&amp;nbsp;&amp;nbsp;} &amp;color(orange){ // Smartyオブジェクトの生成 }&amp;br()&amp;br()&amp;color(orange){ // 変数testにｱﾎﾞｰﾝ(´・ｪ・｀)を入れる }&amp;br()&amp;color(blue){ $smarty-&gt;assign(} &amp;color(green){ &quot;test&quot; } &amp;color(blue) { , } &amp;color(green){ &quot;ｱﾎﾞｰﾝ(´・ｪ・｀)&quot; } &amp;color(blue) { ); }&amp;br()&amp;br()&amp;color(orange){ // テンプレートファイルを画面出力する }&amp;br()&amp;color(blue){ $smarty-&gt;display(} &amp;color(green){ &quot;index.tpl&quot; } &amp;color(blue) { ); }&amp;br()&amp;br()?&gt;|

　テンプレートファイルの中身
|&lt;html&gt;&amp;br()&lt;body&gt;&amp;br() test is {$test}. &amp;br()&lt;/body&gt;&amp;br()&lt;/html&gt;&amp;br()|

　実行結果
|test is ｱﾎﾞｰﾝ(´・ｪ・｀)|    </description>
    <dc:date>2008-11-28T23:58:29+09:00</dc:date>
    <utime>1227884309</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/swdp2p2/pages/12.html">
    <title>環境作成</title>
    <link>https://w.atwiki.jp/swdp2p2/pages/12.html</link>
    <description>
      ***環境作成

とりあえず勉強のためにやりたい人向けですが[[Xampp&gt;http://www.apachefriends.org/jp/index.html]]がオススメです。
Apache、[[PHP]]、MySQLなど必要なものが全部入ってるので便利です。
注意としては、サービスとして登録しないことです。
サービスに登録すると様々な不具合が生じるそうです。(著者未確認)

***PEAR

環境が整った方は、PEARを入れましょう。
PEARはPHPライブラリ群です。詳しくは[[ここ&gt;http://pear.php.net/]]。
インストール方法は非常に簡単です。ただし、Perl5.x.xの方に限ります。
PHPをインストールしたディレクトリ(&amp;bold(){c:\php,c:xampp\php等})内にgo-pear.batというバッチファイルがあります。
これを実行します。インストール内容は分からない人はとりあえず、止まったらエンターキーで大丈夫でしょう。
インストール後、PEARのライブラリであるMDB2をインストールします。これはデータベースの操作を楽にしてくれるライブラリです。
まず、コマンドプロンプト(Win+Rでcmdと入力)を開き、PHPのインストールしたディレクトリに移動し(&amp;bold(){cd c:\php, cd c:\xampp\php等})、
|&amp;bold(){pear install MDB2 &amp;br() pear install MDB2#mysql}|
とそれぞれ入力することでインストールが実行されます。
他にも様々なライブラリがあるのでPEARのHPで探してみるといいかもしれません。    </description>
    <dc:date>2008-10-29T05:56:08+09:00</dc:date>
    <utime>1225227368</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/swdp2p2/pages/15.html">
    <title>テンプレ</title>
    <link>https://w.atwiki.jp/swdp2p2/pages/15.html</link>
    <description>
      一々書くのが面倒なのでプログラムにしてみました。
[[PHPCodeChanger&gt;http://mysmusa.com/uplo/phpcodechanger.zip]]
適当に作ったので不具合は我慢してくだしあ＞＜

作ったソースは載せる前に[[テスト]]で試してみてね。


載せる場合は1行にして載せてください。

*ソースコード基本
#html2(){{{{{{
&lt;code&gt;
|&amp;color(blue){&amp;lt?php} &amp;br() &lt;br&gt;
&lt;br&gt;
&amp;color(blue){?&amp;gt}|
&lt;/code&gt;
}}}}}}

*1行ソース
#html2(){{{{{{
&lt;code&gt;&amp;color(orange){// } &amp;br() &lt;br&gt;
&amp;color(blue){} &amp;br()&amp;br() &lt;br&gt;
&lt;/code&gt;
}}}}}}

*複数行ソース
#html2(){{{{{{
&lt;code&gt;
&amp;color(orange){// } &amp;br() &lt;br&gt;
&amp;color(blue){ } &amp;br() &lt;br&gt;
&amp;color(){{} &amp;br() &lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;color(blue){&amp;nbsp;&amp;nbsp;} &amp;br() &lt;br&gt;
} 
&lt;/code&gt;
}}}}}}

*文字列
#html2(){{{{{{
&lt;code&gt;
&amp;color(green){&quot;&quot;} 
&lt;/code&gt;
}}}}}}    </description>
    <dc:date>2008-10-23T17:47:21+09:00</dc:date>
    <utime>1224751641</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/swdp2p2/pages/11.html">
    <title>プラグイン/コメント</title>
    <link>https://w.atwiki.jp/swdp2p2/pages/11.html</link>
    <description>
      * コメントプラグイン
@wikiのwikiモードでは
 #comment()
と入力することでコメントフォームを簡単に作成することができます。
詳しくはこちらをご覧ください。
＝＞http://atwiki.jp/guide/17_60_ja.html


-----
たとえば、#comment() と入力すると以下のように表示されます。

#comment    </description>
    <dc:date>2008-10-22T03:12:15+09:00</dc:date>
    <utime>1224612735</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/swdp2p2/pages/10.html">
    <title>プラグイン/関連ブログ</title>
    <link>https://w.atwiki.jp/swdp2p2/pages/10.html</link>
    <description>
      * 関連ブログ
@wikiのwikiモードでは
 #bf(興味のある単語)
と入力することで、あるキーワードに関連するブログ一覧を表示することができます

詳しくはこちらをご覧ください。
＝＞http://atwiki.jp/guide/17_161_ja.html

-----


たとえば、#bf(ゲーム)と入力すると以下のように表示されます。


#bf(ゲーム)
    </description>
    <dc:date>2008-10-22T03:12:15+09:00</dc:date>
    <utime>1224612735</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/swdp2p2/pages/9.html">
    <title>プラグイン</title>
    <link>https://w.atwiki.jp/swdp2p2/pages/9.html</link>
    <description>
      @wikiにはいくつかの便利なプラグインがあります。

-----


#ls

-----

これ以外のプラグインについては@wikiガイドをご覧ください
=&gt;http://atwiki.jp/guide/
    </description>
    <dc:date>2008-10-22T03:12:15+09:00</dc:date>
    <utime>1224612735</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/swdp2p2/pages/8.html">
    <title>プラグイン/動画(Youtube)</title>
    <link>https://w.atwiki.jp/swdp2p2/pages/8.html</link>
    <description>
      * 動画(youtube)
@wikiのwikiモードでは
 #video(動画のURL)
と入力することで、動画を貼り付けることが出来ます。
詳しくはこちらをご覧ください。
＝＞http://atwiki.jp/guide/17_209_ja.html

また動画のURLはYoutubeのURLをご利用ください。
＝＞http://www.youtube.com/

-----


たとえば、#video(http://youtube.com/watch?v=kTV1CcS53JQ)と入力すると以下のように表示されます。


#video(http://youtube.com/watch?v=kTV1CcS53JQ)

    </description>
    <dc:date>2008-10-22T03:12:15+09:00</dc:date>
    <utime>1224612735</utime>
  </item>
  </rdf:RDF>
