わかりました、それであなたは を使っていますねPDO
。ただし、スニペットは依然としてインジェクション攻撃に対して無防備です。まだ生のユーザー入力をクエリに渡しています。SELECT *
また、見つかった行数だけが必要な場合は使用しないでください。また、それらをカウントするために完全な結果セットをフェッチしないでください。
function uni($field,$value)
{
$db = new PDO();//make connection, which you don't seem to do
//or (not so good approach):
//global $db;
//Best approach would be to pass the connection to the function, as an extra argument, though
$stmt = $db->prepare('SELECT '.$field.' FROM user WHERE '.$field.' = :value');
if ($stmt->execute(array(':value' => $value)))
{
return $stmt->rowCount();
}
//query failed, throw errors or something
}
その他の例については、ドキュメントを参照してください。
とにかく、コード全体は次のようになります。
function uni($field,$value,$db)
{
$stmt = $db->prepare('SELECT '.$field.' FROM user WHERE '.$field.' = :value');
if ($stmt->execute(array(':value' => $value)))
{
return $stmt->rowCount();
}
return false;
}
$username = $_POST['username'];
$result = uni('username', $username,$pdo);//<--pass connection