PHPのDB操作、PDOってなに

パソコン

PDOとは何なのか、PODってバンドなら知ってる。

pdoと打っているつもりがpodになりがち。

PDOとは「PHP DATA OBJECTS」の略。

$変数名=new PDO(….)

このように宣言される。

まず「$変数名」で入れる変数を決めて、
=で代入する
newはインスタンス(オブジェクト)を新しく作る
PDO()は()の引数でPDOクラスを使う(DBに接続するための情報が書かれる)

()の引数のPDOクラスでインスタンスを生成して、$変数に入れる。

オブジェクト指向の話。入門書にオブジェクト指向の解説は無い。
オブジェクトとインスタンスは同じ意味。

簡単に言うと、持たせたいパラメーターや関数のセット(クラス)を使って、
機能を持った入れ物を複製していける。RPGの酒場で仲間を増やすときに現れるように。
その後は、作成された戦士(オブジェクト)ごとに違いが出てくるが、
HP・MPなどの項目、覚えていける技、使えるアイテムは同じ。
魔法使いで使える技が違い、アイテムも一部制限されたとする、しかしHP・MPなど項目は同じ。
このあたりをオブジェクト指向で作ると楽になる。

$変数名=new PDO(….)この宣言で、変数に戦士が入っていると思えばいい。
戦士に名前を聞けば、教えてくれるし。
引数を渡し、技(メソッド)を使ってくれと言えばその結果を返してくれる。

$pdo->query(SQL文)

$pod オブジェクトに

-> 命令を出す アロー演算子

query メソッド ()のSQL文を実行する

(SQL文) SQLで書かれた命令文

PDOクラスのメソッドを把握して、SQL構文を覚えれば使えるようになる。

スポンサーリンク

PDOStatementとは何なのか。

PDOクラスとPDOStatementクラスの2種類がある。

それぞれで用意されているメソッドも違う。

PDOStatementクラスはprepareメソッドで作られるインスタンス。

ややこしい話になっている。

$pdo=new PDO(….)
PDOクラスを使ったpodという名前のインスタンスができる。

簡単に言うと、DBに接続する段階

$sql=$pdo->prepare(SQL文)
PDOStatementクラスを使ったsqlという名前のインスタンスができる。

簡単に言うと、DB上でSQL命令文を入力した所(実行前)

変数sqlにはMYSQLに接続され、
命令文も打ち込まれている状態のオブジェクトが入っている。
それを実行するためのメソッドを呼び出し実行する。
$sql->execute()

簡単に言うとMYSQLの実行ボタンを押す。

queryメソッドにはprepareとexecuteの機能がある。
なぜ機能が分かれるのか。

SQL文にはPHPの変数を書いてはいけない。

以下のようにSQL文を書いてはいけない

SELECT * FROM user WHERE name=’$name’

‘;DELETE FROM user–と検索に入力されると
データーが削除されてしまう。SQLインジェクション

なので、繰り返すが
SQL文にはPHPの変数を書いてはいけない。

これを防ぐためにプレースホルダを使う
SQLの特殊文字をエスケープ処理、無効化することができる。
自分でエスケープせずに、プレースホルダを使う方が間違いがない。
:文字列 ダブルコロン+文字列でプレースホルダをしていする
プレースホルダ名は、カラム(列)名にする。

SELECT * FROM user WHERE name=:name”

この値を入れるために、prepareが使われる

その後bindValueで、プレースホルダに値をバインドする。
bindValue(‘:name’, $name, PDO::PARAM_STR);
(プレースホルダ名,バインドする値,データ形)

※バインドとは
割り当てる

まとめ

検索など、フォームの入力を使ってDBを検索する場合は
queryでは処理しないで、以下の手順を踏む。

prepareで変数部分をプレースホルダに置き換えたSQL文をセットする
bindValueでプレースホルダにPHPの変数を割り当てる。
その後、executeで実行する。

コメント

タイトルとURLをコピーしました