こんにちは!
ナビゲータのEVEです。
価格:3,740円 |
本日は、「独習PHP」を読みながら、開発環境について調べました。読んでみての感想は、何とかなりそうって言う感じです。
[PHPの接続コネクタ]
昨日も話しましたが、PHPのコネクタは、PHP5までは、mysql_connectが利用できたのですが、PHP7から利用できなくなりました。その代わりに出てきたのが、MySQLiとPDOなのですが、「独習PHP」では、PDOを推奨しています。
このPDOを推奨する理由は、従来は、データベースを変えた場合、今の私のようにデータベースへの記述を変更しなくてはいけないのですが、PDOを導入すれば、今後そのようなことはなくなるというのです。PDOは、多くのデータベースへ統一的な接続を提供しており、もし、データベースを変更することになったとしても、記述を変更することがないというのです。その機能を、データベースの抽象化といい、PDOをデータベースの抽象化レイヤーと表現しています。
そりゃ便利ですね?実は、次期システム、EVEシステムは、PostgreSQLを利用しようとしています。理由は、MySQLの独立性がOracleの買収により失われたこと・・・。やはり、データベースの販売を目的としている所に買収されると、独立性が失われます。などなど、総合的に考え、会社として独立してかつ、無償でデータベースを提供しているPostgreSQLにしようと考えたわけです。
ただ、読みすすめていくと、接続時のデータベースに渡す引数はデータベースを変えるたびに、変更しなくてはいけないようなので、その部分は汎用的に作らなくてはいけません。
このPDOが出てこなければ、PHPでインターフェースを作って、いろいろなデータベースへ汎用的に接続できるようにしようとしていたのですが、1つ余計な仕事が省けました。
[環境調査]
PDOを利用すると決まったので、同関数が動作する環境になっているかどうかまず最初に調べました。php.iniの記述を修正し、PDOを利用できるようにすると「独習PHP」に書かれていたので、php.iniを見ようとしたのですが、Fedraとは同じ位置にありません。Fedraは、/etc配下にあったのですが・・・?そのため、findコマンドで探してみました。そうすると、ディレクトリを分けて、2つ見つかりました。[/etc/php/8.1/cli/php.ini] 、[/etc/php/8.1/apache2/php.ini]配下です。
何が違うんだろうと見てみたのですが、違う点は、記述的には、2箇所・・・。400行目と430行目です。MySQLに関連する所ではなさそうです。
【400行目】
[Apache配下]
expose_php = Off
[cli配下]
expose_php = On
【430行目】
[Apache配下]
memory_limit = 128M
[cli配下]
memory_limit = -1
じゃ、MySQLの記述の部分を探したところ、2箇所見つかりました。
【/etc/php/8.1/cli/php.ini /etc/php/8.1/apache2/php.ini共通】
936行目 ;extension=pdo_mysql
・
・
・
1057行目 [Pdo_mysql]
1058行目 ; Default socket name for local MySQL connects. If empty, uses the built-in
1059行目 ; MySQL defaults.
1060行目 pdo_mysql.default_socket=
昨日の調査では、PDOは利用可能だということは分かっているのですが、この記述であっているのでしょうか?いじって、PDOが利用できなくなるのはいやなので、調査のみで本日は終了しました。
[独習PHP]
昨日作成したプログラムは、あるサイトのプログラムをほぼコピーし作成したものなのですが、本日は、独習PHPの方法で試しています。
[DB接続関数]
<php
function getDb():PDO {
$dns = "mysql:dbname=DBName; host=127.0.0.1; charset=utf8;";
$user="UserID";
$password= "Password";
$db = new PDO($dns ,$user,$password);
return $db;
}
?>
[呼び出し元プログラム]
<?php
require "getDataBase.php"; //初期設定関数
//DBへ接続します
$db = getDb();
//プリペアドステートメントの定義
$stmt = $db->prepare("select * from TableName");
//SQLを実行する
$stmt->execute();
//取得データ終了まで以下の処理を実行する
foreach ($stmt as $row) {
//テーブルの内容を表示します
echo $row['ColumnName']."<BR>";
}
?>
現在、https://www.pro2grammer.com/wordpress/へ勉強した情報をまとめています。調べた内容をできるだけ分かりやすくまとめていますので、よろしければ御利用ください。公開は、明後日以降になります。
では、また!