phpのDBで抑えておくべきポイント

Pocket

dbについて

とりあえずよく使う処理をざっと

query()とprepare()どちらが良いか

どちらでもいい。
よほど簡単なクエリならquery関数でテストも良いが、危険なので一切使わなくても問題なし。
prepare一本で良い

a.
$st = $pdo->prepare();
$st->execute();

b.
$st = $pdo->query();

データベースについて

バッファクエリ:phpサーバーに結果を全て持ってくる。
非バッファクエリ:dbサーバーに結果を残し、逐次データを取得する形
どちらでも良いが、巨大なものは非バッファクエリの方が良い。

apiはどれを使うべきか

pdoとmysqliがあるが、pdoが良い。
過去にmysqlというものも合ったが、php7以降は使えない

utf-8の表記

関数の引数でutf-8を指定する時、’utf8’と’utf-8’の二種類がある。通常は’utf-8’とするが、MYSQL周りでは’utf8’とハイフンを除く事がある。
エンコード周りがうまく動かない時は要確認。

SQLlite

SQLliteは超小規模データベース。ファイルをdbとして使うので移行などがとても楽
http://php.net/manual/ja/mysqlinfo.terminology.php

自動コミットについて

毎回dbを変更するかどうか
通常はon。
自動コミットの反対は手動コミット
オフにすると複数の変更をcommit()などで一度に行うことが可能になる

手動コミット

デフォルトでoff。通常はオートコミットモード
トランザクション(バッファ)に貯めて一度に更新をかける。テーブルの削除・作成などには対応していない

トランザクション

コードのイメージです。
$dbh->beginTransaction();
$dbh->exec(“insert into staff (id, …”);
$dbh->exec(“insert into salarychange (id, …”);
$dbh->commit();

ロールバック

トランザクションを破棄する事

pdoについて

dbと接続するためのclass

newの時に接続情報を渡すのではなく、
ID、passはstaticで渡しておく。
そうするとnewでいつでもどこでも作り出すことが出来る

持続接続について。

接続がキャッシュされて負担が減る。
基本的には自動でonになっているので、特に何もしなくて良い。
コンストラクタ以外では設定できない。ODBCは自動でこの機能を肩代わりしてくれる
$dbh = new PDO(‘mysql:host=localhost;dbname=test’, $user, $pass, array(
PDO::ATTR_PERSISTENT => true
));

prepareとは

prepare 超重要。プリペア。
文オブジェクトを実行し、PDOStatementを返す…SQLの前準備。
SQLを文字列で渡せばok。?か:nameを使い、安全に置換することも可能。
LIKE演算子の%(ワイルドカード)は、これの引数に含めてはいけない。bindvalueで使う。

PDOStatement::bindValue、PDOStatement::bindParam。超重要。bindValue一本で良い。

プレースホルダー(?か:name等)に値をバインドする。

変数の代入みたいなもの。
LIKE演算子の%(ワイルドカード)は、ここで使う。
$st->bindvalue ( ‘:name’, “%{$name}%”, PDO::PARAM_STR );

PDOStatement::execute() 超重要。プリペアドステートメントを実行する。

PDOStatement::bindColumn()カラムにバインド。便利かも

PDOStatement::columnCount() 結果セット中のカラム数を返す、。executeの後に使う

PDOStatement::fetch() — 結果セットから次の行を取得する
foreachなどで次々取得する。丁寧にやるならfetch_styleにPDO::FETCH_ASSOCなども設定した方が良い。

PDOStatement とは

結果セット。queryやprepareで帰って来るオブジェクト
public PDOStatement PDO::prepare ( string $statement [, array $driver_options = array() ] )

プリペアドドステートメントを使った際のSQLのエラーの取得

PDOStatement::errorInfo()
↓では取れない。
PDO::errorInfo ()

属性を指定できる。全て小文字扱いなど

PDOStatement::closeCursor()
execute()複数実行する時は一度closeCursor()を挟む必要がある。ドライバによる。

PDOStatement::rowCount — 直近の SQL ステートメントによって作用した行数を返す。「検索結果:n件」はこれで取得

php

Posted by admin8admin