phpでmariaDBに接続するまで(自分用)

# dbに接続する

```php
mysql -uroot -p;
```

# dbを作る

```php
create database phpsampel;

MariaDB [phpsample]> 
```

# 作った dbを使う

```php
use phpsample;
```

# ユーザーとホストを見る

php側からdbに接続するユーザーはrootでhostは127.0.0.1


```php
MariaDB [phpsample]> SELECT user,host FROM mysql.user;

+--------------+-----------+
| user         | host      |
+--------------+-----------+
| root         | 127.0.0.1 |
| root         | ::1       |
| root         | localhost |
| ur_wordpress | localhost |
+--------------+-----------+
```

# dbに接続するためにPDOを使いたい



```php
pdh = new PDO('mysl=localhost; daname=phpsample', $root, $password)
```

# エラー処理を書きたい


```php

<?php
try {
    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
    foreach($dbh->query('SELECT * from FOO') as $row) {
        print_r($row);
    }
    $dbh = null;
} catch (PDOException $e) {
    print "エラー!: " . $e->getMessage() . "<br/>";
    die();
}
?>

```

# ちゃんとエラーが出た

![ERR処理.png](C:\Users\vaaav\Desktop\ERR処理.png)

# 例外のメッセージを取得するための関数を覚えたい

getMessage() 




```php


else{

throw new Exception("errメッセージです");

} catch (Exception $e)

$e-> getmessage();

};

?>

```

# viでコピーしたらインデントが変な感じになった
```mysql
set paste
```
このコマンドでインデントを無効にしてコピペできる


# ずれたインデントをviで一気に消したい

消し始めたい行でme

me 

消し終わりたい行でms

ms 


Escをして最後にこのコマンドを実行して消える

:'s,'ed




# DBに接続してみる

```php

<?php
try {
    $dbh = new PDO('mysql:host=160.16.120.119;dbname=phpsample', $root, $<pass>);
    foreach($dbh->query('SELECT * from FOO') as $row) {
        print_r($row);
    }
    $dbh = null;
} catch (PDOException $e) {
    print "エラー!: " . $e->getMessage() . "<br/>";
    die();
}
?>

```

できてない

```php

('mysql:host=localhost;dbname=phpsample', $root, $urakaway115); foreach($dbh->query('SELECT * from FOO') as $row) { print_r($row); } $dbh = null; } catch (PDOException $e) { print "エラー!: " . $e->getMessage() . "
"; die(); } ?>

```

いや、これはそもそもphpの構文がおかしいからこんなことになっているんだ


# 直す

```php

http://160.16.120.119/SampleTryChat.php

160.16.120.119 ページは機能していません

160.16.120.119 では現在このリクエストを処理できません。
HTTP ERROR 500

```

なおってない

# appach のエラーログを見てみよう

全然違うエラーログが夜中に出てそれ以降とくにない

そして、なぜか

 error_log-201701229というファイルが二つある

```php

[Sat Jan 28 06:23:04.234565 2017] [:error] [pid 1569] [client 91.196.50.33:55551] script '/var/www/html/testproxy.php' not found or unable to stat
 84 [Sat Jan 28 19:25:53.409146 2017] [:error] [pid 1569] [client 185.49.14.190:38542] script '/var/www/html/testproxy.php' not found or unable to stat
 85 [Sun Jan 29 03:50:01.582917 2017] [mpm_prefork:notice] [pid 1155] AH00171: Graceful restart requested, doing restart                                                                           error_log-20170129 (/var/log/httpd)                                                                                                                        
 ```
# もう一度phpの構文から見直す
 
 なんか、ちゃんとしたエラーになった
 
```php

エラー!: SQLSTATE[HY000] [1130] Host 'tk2-236-27615.vs.sakura.ne.jp' is not allowed to connect to this MariaDB server

```

# エラーの原因を究明したい

「他のサーバに入れない。MySQLで他のサーバからのアクセスを許可するAdd Star」というそれっぽい記事を見つけたので読んでみる

http://d.hatena.ne.jp/editnuki/20110813/1313177077


# 許可されてるホストを見たい

```php
| root         | 127.0.0.1 |
```

そうか、localhostってことは、このパソコンからしかアクセスできないってことですか？私はさっきプログラムの中で、ホスト名を160.16.120.119にしてたよ？てか、この前から思ってたんだけど127.0.0.1ってなに？



```sql

MariaDB [(none)]> select host from mysql.user;
+-----------+
| host      |
+-----------+
| 127.0.0.1 |
| ::1       |
| localhost |
| localhost |
+-----------+
4 rows in set (0.00 sec)



```



# また違うエラーが出た

```php

エラー!: SQLSTATE[28000] [1045] Access denied for user 'apache'@'localhost' (using password: NO)

```



それっぽい記事をみつけた

http://www.phpbook.jp/tutorial/pdo/index6.html


# 接続できた！！！♪. ♪~♪ d(⌒o⌒)b♪~♪ﾗﾝﾗﾝ.

```php

<html>
<head><title>PHP TEST</title></head>
<body>

<?php

$dsn = 'mysql:dbname=uriage;host=localhost';
$user = 'testuser';
$password = 'testuser';

try{
    $dbh = new PDO($dsn, $user, $password);

    print('<br>');

    if ($dbh == null){
        print('接続に失敗しました。<br>');
    }else{
        print('接続に成功しました。<br>');
    }
}catch (PDOException $e){
    print('Error:'.$e->getMessage());
    die();
}

$dbh = null;

?>

</body>
</html>

```  


# 次、dbの中身をhtmlに描画する

dbには接続できたので、次は、dbのテーブルの中のカラムを表示してみましょう。まずは、テーブルを作り、テーブルの中にカラムを作っていきましょう。テーブルを作るのは

```php

create table テーブル名 (
フィールド名 データ型,
フィールド名 データ型,
フィールド名 データ型
);

```

# 作ったテーブルを確認したい

テーブル一覧をみるのはshow tables でテーブルの中に入れたカラムをみるのは desc テーブル名です。

```php

phpsample

desc user
    -> ;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id       | int(11)      | YES  |     | NULL    |       |
| username | varchar(255) | YES  |     | NULL    |       |
| email    | varchar(255) | YES  |     | NULL    |       |
| password | char(30)     | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+

```


# 手順

手順としては、sqlのセレクト文ですべてを選択するコマンドを変数に格納する。そして、queryを実行して返り値で受け取る。foreachで受け取ったデータを一つずつ、また別の変数にひとつづつ格納する。



# 特に出る気配ない

たぶん、テーブルの作り方、指定の仕方が原因だ


```php

// SELECT文を変数に格納
$sql = "SELECT * FROM cities";
 
// SQLステートメントを実行し、結果を変数に格納
$stmt = $dbh->query($sql);
 
// foreach文で配列の中身を一行ずつ出力
foreach ($stmt as $row) {
 
  // データベースのフィールド名で出力
  echo $row['name'].'：'.$row['population'].'人';
 
  // 改行を入れる
  echo '<br>';
}

```