<?php $dbh = new PDO('mysql:host=DBHOST;dbname=test;charset=utf8', USERNAME, PASSWORD); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); // 静的プレースホルダを指定 $sth = $dbh->prepare("select * from test WHERE a=? and c=?"); $sth->setFetchMode(PDO::FETCH_NUM); $a = 'abc'; $c = 1; $sth->bindParam(1, $a, PDO::PARAM_STR); $sth->bindParam(2, $c, PDO::PARAM_INT); $sth->execute(); while ($data = $sth->fetch()) { var_dump($data); }
@see http://blog.tokumaru.org/2011/08/pdo.html
ポイント1
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); // 静的プレースホルダを指定
静的プレースホルダを設定する。
⇒これでSQLインジェクションはひとまず大丈夫
ポイント2
$sth = $dbh->prepare("select * from test WHERE a=? and c=?");
ポイント3
$sth->bindParam(1, $a, PDO::PARAM_STR);
bindParam+型指定
外部プログラマさんに説明する時は、このページを見せよう(ㆁᴗㆁ✿)