【基礎】PHPとDBの参考リンク・用語等

# PHP
## 参考リンク
- [PHP入門](http://www.phpbook.jp/tutorial/)
- [inputタグにおけるidとnameの違い](http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11103408596)
- [PHPでフォームの値を取得する方法](http://ponk.jp/php/basic/form)
    - タグにname属性をつけて引っ張る。
- [フォーム送信方法](http://www.php-labo.net/tutorial/php/form.html)
- [PHP比較演算子](http://php.net/manual/ja/language.operators.comparison.php)
- [PHPでJSONデータの取得の仕方](http://qiita.com/fantm21/items/603cbabf2e78cb08133e)

## 超基礎
- <?php ～?>で囲んでおけばどこに記述しても良い。
- 変数は1つのphpファイルの中で共有。
- $this->はclass 内から、自class 内の変数や関数を呼ぶ時に用いる。[(参考)](http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1035811965)
- [file_get_contents()](http://php.net/manual/ja/function.file-get-contents.php)
    - ファイルの中身を文字列として取り出す。
- 連想配列
    - 文字のキーをもとにして値を設定した配列。　[(参考)](http://www.php-labo.net/tutorial/php/hash.html)
- substr : 文字列の一部を返す

```php
string substr ( string $string , int $start [, int $length ] )
```
文字列 string の、start で指定された位置から length バイト分の文字列を返す。
length を省略した場合は、 start の位置から文字列の最後までの部分文字列を返す。
[(参考)](http://php.net/manual/ja/function.substr.php)

## namespaceとuseの使い方
- [PHPの名前空間について簡単にまとめてみた](http://ucwd.jp/blog/736)
- [5分で理解するPHPのnamespaceとuseの使い方](https://remotestance.com/blog/3064/)

### namespace
namespace以降のクラスなどはhoge/hoge2の影響下に入る。
ファイルの場所を示すものと考えると良い。

```php:hoge/hoge2/foo.php
namespace hoge/hoge2

class Foo(){
  ...
}
```

### use
指定したディレクトリやファイル内にパスを通す。

```php:hoge/hoge2/orange.php
class Orange{
  $kawa = 0;

  public function suppai(){
    ...
  }
}
```

```php:apple.php
use hoge/hoge2/Orange

$orange = new Orange;
$orange->suppai();
```


## foreach文
### ①
```php
foreach (配列変数 as 変数){
  文
}
```

```php
$preflist = array('東京', '大阪', '名古屋');

foreach ($preflist as $pref){
  print $pref;
}
```
配列に含まれる各要素の値を順に取り出し処理したい場合に便利。[(参考)](http://www.phpbook.jp/tutorial/for/index8.html)

### ②
```php
foreach (配列変数 as $key => $value)
    文
```

```php
$preflist = array('Tokyo' => '東京', 'Osaka' => '大阪');

foreach ($preflist as $key => $value){
  print $key.'=>'.$value;
}
```
> 【結果】
Tokyo => 東京
Osaka => 大阪

配列のキーと要素を取り出すことができる。[(参考)](http://www.phpbook.jp/tutorial/for/index9.html)

## ->と=>の違い
[(参考)](http://www.phppro.jp/qa/536)

### ->とは
オブジェクト（クラス）のメソッドやフィールド変数を参照するための演算子。

```
$client->post($login_url, $login_params);
```

### =>とは
配列に値を代入するための演算子。

```
$login_params = array("next_url" => "/home.pl", "email" => $email, 
"password" => $password);
```

# DB
## 参考URL
- [MySQL入門](http://mysql.akarukutanoshiku.com/category5/)
- [テーブル作成](http://www.dbonline.jp/mysql/table/)
- [MySQLデータ取得](http://www.dbonline.jp/mysql/select/)
- [MySQLデータ型](http://www.dbonline.jp/mysql/type/)
- [MySQLコマンドまとめ](http://qiita.com/fukumone/items/2c75bd4a11a7817e6c9e)
- [DBから読み出し時に改行を反映させる](http://www.phppro.jp/qa/4181)

## 超基礎
- AUTO_INCREMENT : 挿入時にカラムに0またはNULLを設定しておけば、自動で1増える。
- TIME型は9:0(09:00)等でも受け取ってくれる。
- DBに挿入する値はなるべくシンプルでなくてはならない。
    - 例）DBに月～金という値を挿入したいときは、1~5と挿入して、PHPサイドで数字から漢字に変換する。

## キー関係
### プライマリキー
テーブル固有のキー。
テーブルの中で一つしか設定することができず、ユニークである。

### フォーリンキー
テーブルの指定したカラムに格納できる値を他のテーブルに格納されている値だけに限定する。
参照される側のテーブルを親テーブル、参照する側のテーブルを子テーブルと呼ぶ。
デフォルトでは親テーブルの中の外部キー制約の対象となっているカラムの値を更新しようとするとエラーになる。削除しようとした場合も同様。

→[フォーリンキーが設定できない](http://wiki.navicat.com/ja/index.php/%E5%A4%96%E9%83%A8%E3%82%AD%E3%83%BC%E3%81%AE%E4%BD%9C%E6%88%90%E3%81%8C%E3%81%86%E3%81%BE%E3%81%8F%E3%81%84%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%E3%81%AA%E3%81%9C%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F)

### ユニークキー
重複する値を格納できなくする。

## インデックス
[(参考)](http://www.dbonline.jp/sqlite/index/index1.html)

対象のカラムのデータを取り出し、高速に検索できるように手を加えて保存しておいたもの。

### メリット
検索が速くなる。
データ検索時に、テーブルではなくインデックスを検索するためである。

### デメリット
テーブルと別にデータを追加、保存するため、処理が重くなる。
データやその種類が少ない、データの検索があまり行われないカラムに設定してもあまり意味はない。


## 論理削除と物理削除
[(参考)](http://blog.webcreativepark.net/2008/05/26-103152.html)

### 論理削除
仮想的に表示時に見えなくしてしまう処理。

### 物理削除
delete文でテーブル自体から削除。