Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548
Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548
Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548
こんにちは!
今回は、PHP から MySQL への接続について以下の環境で試してみました。
これで最小構成(設定)ではありますが、LAMP の環境は作れるかと思います。
環境
- 仮想基盤: AWS EC2
- OS: CentOS 7.4 (AMI) 【AWS】CentOSをAWS上で使う でデプロイした環境になります。
- PHP: 5.6.29 【PHP】CentOSにPHPをソースからインストールする で設定した環境になります。
- MySQL: 5.6.26 【MySQL】CentOSにMySQL5.6.26をインストールする で設定した環境になります。
作業手順
1. MySQL にログインします。
[code language="shell"]
[root@localhost ~]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 375
Server version: 5.6.26
[/code]
2. MySQL のパスワードを初期値から変更していない場合はここで変更します。
ユーザーの記述が 'ユーザー名'@’ホスト名或いは IP ’ であるところに注意します。パスワードもシングルクォーテーションで括ります。
[code language="SQL"]
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('password');
Query OK, 0 rows affected (0.00 sec)
[/code]
3. データベースを一覧表示します
[code language="SQL"]
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
[/code]
4. test データベースへ接続します
[code language="SQL"]
mysql> use test;
Database changed
[/code]
5. test データベースのテーブルを表示します。テーブルは空です。
[code language="SQL"]
mysql> show tables;
Empty set (0.00 sec)
[/code]
6. test データベースにテーブルを作成します
[code language="SQL"]
mysql> create table test_table(col1 int(10));
Query OK, 0 rows affected (0.01 sec)
[/code]
7. テーブルが作成されたか確認します
[code language="SQL"]
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test_table |
+----------------+
1 row in set (0.00 sec)
[/code]
8. テーブルの定義を確認します。
[code language="SQL"]
mysql> desc test_table;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| col1 | int(10) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
1 row in set (0.00 sec)
[/code]
9. テーブルに 1 行入れてみます。
[code language="SQL"]
mysql> insert into test_table value('100');
Query OK, 1 row affected (0.00 sec)
> commit;
[/code]
10. 1行入っていることを確認します。
[code language="SQL"]
mysql> select * from test_table;
+------+
| col1 |
+------+
| 100 |
+------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
[/code]
11. これでデータベース側の準備はできました。PHP から MySQL に接続するためには mysql socket が必要になりますのでファイルの有無を確認します。
[code language="shell"]
[root@localhost ~]# find / -name mysql.sock -print
/var/lib/mysql/mysql.sock
[/code]
12. PHP から MySQL に接続できるよう、php.ini のファイルに mysql socket の場所を以下のように追記します。
以下は mysqli の場合になります。
[code language="shell"]
[root@localhost ~]# vi /etc/php.ini
; Default socket name for local MySQL connects. If empty, uses the built-in
; MySQL defaults.
; http://php.net/mysqli.default-socket
mysqli.default_socket = /var/lib/mysql/mysql.sock
[/code]
13. Apacheのサービスを再起動します。
[code language="shell"]
[root@localhost ~]# systemctl restart httpd.service
[/code]
14. MySQLのサービスを再起動します。
[code language="shell"]
[root@localhost ~]# systemctl restart mysql.service
[/code]
15. 接続用の phpファイルを作成します。
[code language="shell"]
[root@localhost ~]# vi /var/www/html/mysqltest.php
[code language="shell"]
<?php
$hostname = "localhost";
$username = "root";
$password = "password";
$dbname = "test";
$link = mysqli_connect($hostname, $username, $password, $dbname);
if ($link) {
$query = "select * from test_table";
$result = mysqli_query($link, $query);
while($row = mysqli_fetch_array($result)){
echo $row['col1'];
}
mysqli_free_result($result);
mysqli_close($link);
} else {
echo 'DB connect failure';
}
?>
[/code]
15. 作成したphp にアクセスし、100 が表示されればOKです。
いかがでしょうか。
PHP から MySQL への接続に失敗している場合は大体 mysql socket ファイルが無いか、php.ini ファイルに mysql socket ファイルが格納されている場所(パス)が書かれていないか、どちらも問題がなければ、Apache または MySQL サービスが再起動されていないかかなと思っております。
では最後までお読みいただきありがとうございました!