非推奨のmysql_*関数の使用を停止した後、mysqliに切り替えました。しかし、その後、プリペアドされていないステートメントはSQLインジェクションに対して安全ではないことに気づきました。その後、コードを再度変更しました。
私が持っていたのは、変数$ IDがデータベースに存在するかどうかをチェックし、その行のタイトルの値を出力する次の関数でした。
function showPostTitle($ID, $mysqli) {
$result = $mysqli -> query("SELECT ID, title FROM blog where ID = $ID");
$row = $result -> fetch_array(MYSQLI_BOTH);
echo $row['title'];
}
私はそれをこれに変更しました:
function showPostTitle($ID, $mysqli) {
$stmt = $mysqli -> prepare("SELECT ID, title FROM blog WHERE ID = ?");
$stmt -> bind_param("i", $ID);
$stmt -> execute();
$stmt -> bind_result($ID, $title);
$stmt -> fetch();
print_r($title);
$stmt -> free_result();
}
私の質問は、これがプリペアドステートメントを実装する正しい方法ですか?さらに、SQLインジェクションから安全になりましたか?この質問に答えてくれる人に感謝します:)