mysqli は、SQL インジェクション攻撃から保護する準備済みステートメントをサポートしています。次のようになります。
/* Create a prepared statement */
$stmt = $mysqli -> prepare("SELECT column FROM table WHERE name=?");
/* Bind parameters */
$stmt -> bind_param("s", $_POST['checkname']);
/* Execute it */
$stmt -> execute();
/* Bind results */
$stmt -> bind_result($result);
/* Fetch the value */
$stmt -> fetch();
echo $result;
詳細については、マニュアルを確認してください。
コメントに応じて、簡単な要約:
では$stmt->prepare("...")
、クエリを作成し、使用する変数の場所を「?」で保持します。
では$stmt -> bind_param(...)
、変数を対応する疑問符にバインドしています。最初の引数は型で、次の引数は変数です。文字列と整数を使用している場合、括弧内は次のようになります"si", $stringVar, $intVar
$stmt -> bind_result(...)
あなたは結果を何にバインドしているのかを述べています。クエリが名前と年齢の場合、括弧内は次のようになります$name, age
では$stmt->fetch()
、結果を取得しています。複数の行が返された場合は、次のようにします。
while($stmt->fetch()) { //コードはここに }
または、PDO を使用することもできます。次のようになります。
/* Create a prepared statement */
$stmt = $pdo->prepare("SELECT column FROM table WHERE name=:checkname");
/* Bind parameters */
$stmt->bindParam(':checkname', $_POST['checkname']);
/* Execute it */
$stmt->execute();
/* Fetch results */
$obj = $stmt->fetchObject();
echo $obj->column;
詳細については、マニュアルを確認してください。