支部を検索する
プレースホルダーに値をバインドする
bindValue(プレースホルダー,値,値の型)
プリペアドステートメントを作った後から、プレースホルダに値をバインドします。変数に値を代入するようなもの!
bindValue(プレースホルダー,値,値の型)
プリペアドステートメントを作った後から、プレースホルダに値をバインドします。変数に値を代入するようなもの!
定数 | PHPでのデータ型 | MySQLでのデータ型 |
---|---|---|
PDO::PARAM_STR | string | VARCHAR,TEXTなどの文字列型 |
PDO::PARAM_INT | int,floatなどの数値 | INT,FLOATなどの数値型 |
PDO::PARAM_BOOL | boolean(論理値) | 論理値 |
PDO::PARAM_LOB | string | BLOBなどのラージオブジェクト型 |
PDO::PARAM_NULL | null | NULL |
セキュリティ対策
フォーム入力から悪意のあるSQL文を送信し、データベースをハッキングするSQLインジェクションに対策するためには、プレースホルダを使ってSQL文を記述してプリペアドステートメントを作ります。プレースホルダの値をbindValue()を使ってバインドすることで、SQLエスケープも同時に行われSQLインジェクション対策として有効な手段になります。
フォーム入力から悪意のあるSQL文を送信し、データベースをハッキングするSQLインジェクションに対策するためには、プレースホルダを使ってSQL文を記述してプリペアドステートメントを作ります。プレースホルダの値をbindValue()を使ってバインドすることで、SQLエスケープも同時に行われSQLインジェクション対策として有効な手段になります。
フォーム
<form method="POST" action="search.php">
<ul>
<li>
<label>支部を検索:<br>
<input type="text" name="branch" placeholder="支部名を入力">
</label>
</li>
<li><input type="submit" value="検索する"></li>
</ul>
</form>
データベース検索コード
<?php
require_once("../common/es.php"); //PHPのフォーム~入力データのチェック~で参照してね
$backURL = "searchForm.php";
if (!checkEn($_POST)) { //エンコードチェック
header("Location:{$backURL}");
exit();
}
if (empty($_POST)) { //空の時エラー
header("Location:{$backURL}");
exit();
} else if (!isset($_POST["branch"]) || ($_POST["branch"] === "")) {
header("Location:{$backURL}");
exit();
}
//接続パラメーター
$user = '****';
$passwoed = '****';
$dbName = 'kyotei';
$host = 'localhost:8888';
$dsn = "mysql:host={$host};dbname={$dbName};charset=utf8";
?>
<!doctype html>
<html lang="ja">
・・・・↓↓
<?php
$branch = $_POST["branch"];
try {
$pdo = new PDO($dsn, $user, $passwoed);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT*FROM classic2022 WHERE branch LIKE(:branch)"; //SQL文
$stm = $pdo->prepare($sql); //プリペアドステートメント作成
$stm->bindValue(':branch', "%{$branch}%", PDO::PARAM_STR);
$stm->execute(); //SQL文の実行
$result = $stm->fetchAll(PDO::FETCH_ASSOC);
if (count($result) > 0) {
echo "{$branch}支部の出場選手";
echo "<table border=1>";
echo "<tr>";
echo "<th>", "登録番号", "</th>";
echo "<th>", "選手名", "</th>";
echo "<th>", "登録期", "</th>";
echo "<th>", "支部", "</th>";
echo "</tr>";
foreach ($result as $row) {
echo "<tr>";
echo "<td>", es($row['number']), "</td>";
echo "<td>", es($row['name']), "</td>";
echo "<td>", es($row['reg']), "</td>";
echo "<td>", es($row['branch']), "</td>";
echo "</tr>";
}
echo "</table>";
} else {
echo "{$branch}支部の選手は見つかりませんでした。";
}
} catch (Exception $e) {
echo '<span class="error">エラーがありました</span><br>';
echo $e->getMessage();
}
?>
<HR>
<p><a href="<?php echo $backURL ?>">戻る</a></p>