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();
}
?>
ちゃんとエラーが出た
例外のメッセージを取得するための関数を覚えたい
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>';
}
```