Выборка из базы данных
Выполнение SQL-кода происходит через метод query()
.
$result = $mysqli->query('SELECT title,content FROM articles WHERE id = 10'); while ($article = $result->fetch_assoc()) { echo $article['title']; echo $article['content']; } $result->free(); // рекомендуется использовать: освобождает память MySQL (не PHP)
Не рекомендуется делать выборку со всех полей (через символ *
), т.к. это может уменьшить загрузку страниц из-за выборки лишних данных.
Нельзя передавать значения напрямую из $_GET
, так как злоумышленник может получить контроль над базой данных, например удалить всю таблицу.
// так делать нельзя в целях безопасности сайта $login = $_GET['login']; $password = $_GET['password']; $result = $mysqli->query('SELECT id,name,login FROM users WHERE login='.$login.' AND password='.$password);
В примере выше, посетитель вместо пароля может ввести OR login='admin'
, и авторизуется под админом (данный вид авторизации называется «SQL-инъекция»).
Если надо передать значение из $_GET
, то надо применить метод real_escape_string()
.
// правильный и безопасный способ передачи параметров в SQL-запрос $login = $mysqli->real_escape_string($_GET['login']); $password = $mysqli->real_escape_string($_GET['password']); $result = $mysqli->query('SELECT id,name,login FROM users WHERE login="'.$login.'" AND password="'.$password.'"');
Метод real_escape_string()
экранируеет символы NUL (ASCII 0), \n, \r, \, ', ", и Control-Z.
Поддержать автора