LoginSignup
5
6

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-01-29

dbに接続する

mysql -uroot -p;

dbを作る

create database phpsampel;

MariaDB [phpsample]> 

作った dbを使う

use phpsample;

ユーザーとホストを見る

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

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

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

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

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

エラー処理を書きたい


<?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

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

getMessage()



else{

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

} catch (Exception $e)

$e-> getmessage();

};

?>

viでコピーしたらインデントが変な感じになった

set paste

このコマンドでインデントを無効にしてコピペできる

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

消し始めたい行でme

me

消し終わりたい行でms

ms

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

:'s,'ed

DBに接続してみる


<?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();
}
?>

できてない


('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の構文がおかしいからこんなことになっているんだ

直す


http://160.16.120.119/SampleTryChat.php

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

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

なおってない

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

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

そして、なぜか

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


[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の構文から見直す

なんか、ちゃんとしたエラーになった


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

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

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

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

| root         | 127.0.0.1 |

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


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



また違うエラーが出た


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

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

接続できた!!!♪. ♪~♪ d(⌒o⌒)b♪~♪ランラン.


<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のテーブルの中のカラムを表示してみましょう。まずは、テーブルを作り、テーブルの中にカラムを作っていきましょう。テーブルを作るのは


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

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

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


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で受け取ったデータを一つずつ、また別の変数にひとつづつ格納する。

特に出る気配ない

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


// SELECT文を変数に格納
$sql = "SELECT * FROM cities";

// SQLステートメントを実行し、結果を変数に格納
$stmt = $dbh->query($sql);

// foreach文で配列の中身を一行ずつ出力
foreach ($stmt as $row) {

  // データベースのフィールド名で出力
  echo $row['name'].':'.$row['population'].'人';

  // 改行を入れる
  echo '<br>';
}

```  
5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6