質問失礼します。
現在PHPを勉強しておりPDOというものを知りました。
いろいろと調べましたが内容が難しく私の解釈があっているのか、
コードの書き方はあっているのか教えていただきたく質問させていただきました。
下記はデータベースに商品を登録するシンプルなものです。
インジェクション対策を行ったほうが良い、PDOがあるとお聞きしてPDOを使用してコードを書いてみました。
動作としては意図する動きをするのですがこれではインジェクション対策になっていないでしょうか?
PDO::PARAM_STRを使用していれば
htmlspecialchars~ENT_QUOTES UTF-8は必要ないのでしょうか?
htmlspecialchars~ENT_QUOTES UTF-8はユーザーの入力した値を画面に表示する際にだけ使用しておけばよかったかな?
いろいろと突っ込みどころが多いと思いますがよろしくお願いします。
下記がコードになります。
dbconnect.php
<?php try { $pdo = new PDO("mysql:host=localhost;dbname=menu_list;charset=utf8", "root", "", array(PDO::ATTR_EMULATE_PREPARES => false)); } catch (PDOException $e) { exit('データベース接続失敗。'.$e->getMessage()); } ?>
<?php require('dbconnect.php'); $id= htmlspecialchars($_POST['id'], ENT_QUOTES, "UTF-8"); $kind= htmlspecialchars($_POST['kind'], ENT_QUOTES, "UTF-8"); $name= htmlspecialchars($_POST['name'], ENT_QUOTES, "UTF-8"); $price= htmlspecialchars($_POST['price'], ENT_QUOTES, "UTF-8"); $remarks= htmlspecialchars($_POST['remarks'], ENT_QUOTES, "UTF-8"); $stmt = $pdo -> prepare("INSERT INTO menu (id,kind,name,price,remarks) VALUES (:id, :kind, :name, :price, :remarks)"); $stmt -> bindValue(':id', $id, PDO::PARAM_STR); $stmt -> bindValue(':kind', $kind, PDO::PARAM_STR); $stmt -> bindValue(':name', $name, PDO::PARAM_STR); $stmt -> bindValue(':price', $price, PDO::PARAM_STR); $stmt -> bindValue(':remarks', $remarks, PDO::PARAM_STR); $stmt -> execute(); ?>
回答4件
あなたの回答
tips
プレビュー