.NETのインストール
error : プロジェクト ファイルを開けません。
JDKのインストール
$(TargetFrameworkVersion) v12.0 を使用するときには、Java SDK 11.0 以上が必要です。
Android SDKのインストール
API レベル 31 の android .jar が見つかりませんでした。
こんにちは、せんです。
PHPの学習ノート第2回です。
第2回はDB接続です。
定番のPDOを含む合計4種類の方法について、簡単な使い方と使ってみた感想を記録します。
※DBはPostgreSQLを使用
※この記事ではphp.iniの編集など、細かい説明を省略しています。
PHPのライブラリから提供される、pg_connect、pg_query、pg_fetch_allといった関数です。
PostgreSQL以外のDBについても、mysqli_connect、oci_executeなどが用意されており、使うDBに対応したメソッドを使います。
基本の書き方はこんな感じ。
引数にSQLを直接書くスタイルです。
$conn = pg_connect("host=localhost port=5432 dbname=testdb user=postgres password=***");
$result = pg_query($conn, "select * from books");
while ($row = pg_fetch_row($result)) {
echo "id:$row[0] title:$row[1] writer:$row[2]<br/>";
}
pg_close($conn);
PostgreSQL関数を1番に持ってきましたが、検索するとPDOに関する記事が最も多く、現在最も定番の方法のようです。
PDOとは「PHP Data Objects」の略。
PHP5.1から使えます。
「PDOのメリット=共通のメソッドを使用するのでDBを変更しても修正が楽」という説明が非常に多いのですが、
それでは決め手にならないんじゃないか…と思うので、ほかの違いも見てみましょう。
基本の書き方はこんな感じです。
こちらも引数に直接SQLを書きます。
PDOクラスのオブジェクトを生成して接続します。
try {
$dbh = new PDO('pgsql:dbname=testdb host=localhost port=5432 user=postgres password=***');
$sql = 'select * from books';
foreach ($dbh->query($sql) as $row) {
print "id:$row[0] title:$row[1] writer:$row[2]<br/>";
}
} catch (PDOException $e) {
print('Error:' . $e->getMessage());
die();
}
$dbh = null;
例外はPDOExceptionとしてキャッチされるので、try-catchで書けます。 基本は上の通りです。
PDOについて調べると、プリペアドステートメントを使用した書き方も登場します。
INSERT処理を見てみましょう。
$sql = "insert into books (title, writer) values (:title, :writer)";
$stmt = $pdo->prepare($sql);
$params = array(':title' => '赤毛のアン', ':writer' => 'モンゴメリ');
$stmt->execute($params);
values句で、あとから値をセットするプレースホルダ(:〇〇)を使っています。
SQLインジェクション対策として「PDO+プリペアドステートメント+プレースホルダ」は頻出のセットですが
PostgreSQL関数にもpg_query_paramsという関数があり、これを使えば同じことができそうです。
MySQLの場合はmysqliクラスを使ってPDOと同じように書く方法もあります。
オブジェクトを操作するようにDBを操作するORMのライブラリです。
ORMなどのキーワードを追加して初めて検索結果に出てくるレベルです。
2011年に登場しました。
idiorm.phpの1ファイルを追加するだけなので、フレームワークを使用するより簡単かつ軽量に実装できる選択肢です。
簡単な使用例はこちら。 SQLは書きません。
require_once('../idiorm.php');
ORM::configure('pgsql:dbname=testdb host=localhost port=5432');
ORM::configure('username','postgres');
ORM::configure('password','***');
$books = ORM::for_table('books')->find_many();
foreach ($books as $book) {
echo $book->title . '</br>';
}
$newBook = ORM::for_table('book')->create();
$newBook->title = '長くつしたのピッピ';
$newBook->writer = 'リンドグレーン';
$newBook->save();
④のフレームワークと比べるとはるかに簡単に使えますが、
複雑なクエリを実行する場合はraw_queryメソッドの引数に直接SQLを指定することになります。
LaravelをはじめとしたPHPのメジャーなフレームワークには、もれなくORMが含まれています。
クエリビルダでDB操作を行うこともできますが、 ここではLaravelのORMであるEloquentの基本的なメソッドを見てみましょう。
$allBooks = Book::all();
foreach($allBooks as $book){
echo $book->title;
}
$newBook = Book::create([
'title' => '若草物語',
'writer' => 'オルコット'
]);
$updateBook = Book::findOrFail(1);
$updateBook->title = 'Anne of Green Gables';
$deleteBook = Book::findOrFail(2);
$deleteBook->delete();
このコードはControllerクラスに書かれます。BookはMVCのモデルです。
createメソッドで配列を入れるあたりは見た目にも分かりやすいです。
ただ、ここまで来るまでが長いので、しっかり勉強してから使いたいです。
DB接続について検索すると、体感8割くらいがPDOに関する記事です。
それに乗ってPDOを使うにしても、ほかの方法についていくらか知っておきたいものです。
すでに使用するフレームワークが決まっている場合はその機能を活かしたいですが、
そうでなければ①から③で選ぶことになるでしょう。
この記事が方法選択のとっかかりになれば幸いです。
ご覧いただいてありがとうございました。