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;
詳細については、マニュアルを確認してください。