Безусловно, лучший способ - использовать подготовленные операторы . Вы можете сделать это, используя PDO или mysqli, но я предпочитаю расширение PDO для его именованных параметров.
Почему готовые высказывания являются наилучшим способом? Потому что они заботятся о кавычках и экранировании параметров.
Плохой, старый, подверженный ошибкам, утомительный способ:
$result = mysql_query("SELECT * FROM users WHERE
password='".mysql_real_escape_string($password)."'");
Вы можете поспорить, что, если вы написали такое приложение, вы в какой-то момент забудете о том, чтобы избежать пользовательского ввода, и оставите зияющую дыру в SQL-инъекции.
Хороший подготовленный способ утверждения:
$stmt = $dbh->prepare("SELECT * FROM users WHERE password=:password");
$stmt->bindParam(':password', $password);
$stmt->execute();
Экранирование сделано для вас, и вам даже не нужно беспокоиться о том, чтобы ставить кавычки вокруг типов параметров, которые в них нуждаются.