SQL:プレースホルダ、バインド

$mysqli = new mysqli('接続先のMySQLサーバの[ホスト名]or[IPアドレス]', 
'MySQLサーバに接続する時の[ユーザ名]', 'MySQLサーバに接続する時の[パスワード]',
'[接続先のサーバ名]');

$mysqli = new  mysqli('db', 'test_user', 'pass', 'test_database');
  • MySQLに接続するときに使うインスタスの生成を意味する。
    これは、テンプレ。

  • $mysqliという変数にMySQLiオブジェクトが代入されます。
    これにより、接続先のMySQLデータベースに対してクエリの実行やデータの操作などが行えるようになる。

$stmt = $mysqli->prepare('INSERT INTO employees (name) VALUES (?)');
$stmt->bind_param('s', $_POST['name']);
  • prepare()メソッド:実行するクエリを作成する。

    • (?)プレースホルダといい、数学でいう変数。あとで、値が代入されるモノ。
  • bind_param()メソッドプレースホルダに、値を関連づける(バインドする)。

  • 's':ここには、「i:int」「d:float」「s:string」「b:blob」が入る。

    • blob:バイナリデータ(画像、動画、音声、ドキュメントなど)、テキスト以外
  • $_POST['name']:HTMLフォームなどから送信されてきたデータの中で、name="XXX" の XXX の値を指す。そして、これがプレースホルダ「(?)」に関連づけられる(バインドされる)。

  • こうやって、2行に分けて記述するメリットは、

# POST(formに入力)されたデータを保存する
if($_SERVER['REQUEST_METHOD'] === 'POST') {
    // prepare()は、一種のvalidation
    // employeesテーブル の カラム名=name に、値=(?) を入れる
    $stmt = $mysqli->prepare('INSERT INTO employees (name) VALUES (?)');
    // (?)は、's'=string, 文字列の POSTされたname になる。
    $stmt->bind_param('s', $_POST['name']);
    $stmt->execute();
    $stmt->close();
    // employee.phpに、リダイレクトする
    header('Location: /employee.php');
}

参考サイト