$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行に分けて記述するメリットは、
- SQLインジェクション攻撃を防ぐため。
- クエリを事前にコンパイルしとくことになるので、使いまわせて効率化になる。
# 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'); }