52. シングルクオーテーションを使わない攻撃
SELECT name FROM user where uid
= '$uid' AND age > $age
uid : user_id
age : 31 AND SQL文
意図しないSQL文が実行されてしまう
『mysqli::prepare() 』で
SQLで使うパラマメータをバインドする
53. $mysqli = new mysqli($host, $user , $pw , db");
/* プリペアドステートメントを作成します */
if ($stmt = $mysqli->prepare("SELECT District FROM City
WHERE Name=?")) {
$stmt->bind_param("s", $city); /* パラメータをバインド */
$stmt->execute(); /* クエリを実行します */
$stmt->bind_result($district); /* 結果変数をバインド */
$stmt->fetch(); /* 値を取得します */
$stmt->close(); /* ステートメントを閉じる */
}
/* 接続を閉じる */
$mysqli->close();
54. $mysqli = new mysqli($host, $user , $pw , db");
/* プリペアドステートメントを作成します */
if ($stmt = $mysqli->prepare("SELECT District FROM City
WHERE Name=?")) {
$stmt->bind_param("s", $city); /* パラメータをバインド */
$stmt->execute(); /* クエリを実行します */
$stmt->bind_result($district); /* 結果変数をバインド */
$stmt->fetch(); /* 値を取得します */
$stmt->close(); /* ステートメントを閉じる */
}
/* 接続を閉じる */
$mysqli->close();
『 バインドする場所』
55. $mysqli = new mysqli($host, $user , $pw , db");
/* プリペアドステートメントを作成します */
if ($stmt = $mysqli->prepare("SELECT District FROM City
WHERE Name=?")) {
$stmt->bind_param("s", $city); /* パラメータをバインド */
$stmt->execute(); /* クエリを実行します */
$stmt->bind_result($district); /* 結果変数をバインド */
$stmt->fetch(); /* 値を取得します */
$stmt->close(); /* ステートメントを閉じる */
}
/* 接続を閉じる */
$mysqli->close();
『パラメータの型を指定』
i:Integerを指定
d:doubleを指定
s:stringを指定
b:blobを指定