読者です 読者をやめる 読者になる 読者になる

【SIer⇒Web】スキルアップ日記

SIer⇒Web系への転職を目指す人間の日記。日々の学習などを記録していきます。

2017/01/19:【今日の学習内容】

Webとプログラミングのきほんのきほん

主にPHPからMySQLに接続する箇所を学習。

 

【学習内容】

*データベース操作の基本

基本的には以下の流れ。

①データベース接続(コネクションの開く)

 DBサーバのホスト名/IPアドレス、接続するデータベース名、ユーザ名、パスワードなどの情報が必要。

 PHPの場合は、mysqli_connect関数を使用。

文字コード設定

 mysqli_set_charset(コネクション,"文字コード")で設定。

SQL文実行

 mysqli_query(コネクション,SQL文)

 で直接実行する方法と、プリペアードステートメントを使用して実行するやり方がある。

SQL結果に対する処理(※SELECT文の場合)

 SELECT文の場合は、取得した結果を変数に格納して処理を行う。

 

 // 変数resultに結果を格納

 $result = mysqli_query(コネクション,SQL文);

 

 // 結果の行数分、1行ずつ読み込んで処理(配列に入れているイメージか)

 while ( $row = mysqli_fetch_array($result) ) {

  // 1行ずつの処理

  // 値を参照するときは、$row["カラム名"]

 }

 // 結果の開放

 mysqli_free_result($result);

 

⑤データベース切断(コネクションを閉じる)

 mysqli_close(コネクション);

 

*プリペアードステートメントによる実行

値を設定する箇所を「?」などの記号にしておいて、そこに値を埋め込む方法。

SQLを作る(型だけ作るイメージ)

 $stmt = mysqli_prepare(コネクション,"insert into sample (col1,col2,col3)" .

                                                                 " values(?,?,?);");

バインド変数の設定(?の部分)

 mysqli_bind_param($stmt, "sss", $_POST["col1"], $_POST["col2"], $_POST["col3"]);

③実行

 mysqli_stmt_execute($stmt);

 

SQLインジェクション

悪意ある第三者が、入力フォームなどから不正なSQLを差し込んで攻撃する手法。

対策として、

 ①SQLエスケープ

  特殊な文字を置き換える(例:「'」など)

 ②プリペアードステートメントを使う

がある。

 

【独り言】

明日はPHP初心者のための勉強会。

こういった勉強会に参加するのは初めてだから、

どんなプログラムで進むのか楽しみ。