MYSQL: Это расширение было устаревшим в PHP 5.5.0, и он был удален в PHP 7.0.0. Вместо этого следует использовать расширение MySQLi
или PDO_MySQL
.
Mysqli Ссылка: http://php.net/manual/en/mysqli.query.php
PDO Ссылка: http://php.net/manual/en/book.pdo.php
Преимущества использования PDO:
Большинство PHP программисты обнаружили, как использовать MySQLi и MySQL расширения. Тем не менее, объекты данных PHP (PDO) предлагают способы работы с объектами и извлекают подготовленные операторы, которые упрощают работу.
PDO - это инструмент для доступа к базе данных в PHP, который обеспечивает единообразный доступ к нескольким базам данных. Он не поддерживает синтаксис, специфичный для баз данных, но обеспечивает относительно плавное переключение между различными платформами и базами данных, что можно просто сделать, изменив строку соединения.
Ниже представлена небольшая информация о PDO, в основном направленная на программистов, которые все еще используют расширения MySQL и MySQLi, излагая преимущество первого. Различные аспекты будут изучены в следующих нескольких параграфах.
расширение PDO имеет возможность доступа к любой базе данных, которую водитель PDO был написан для. Существует много PDO-драйверов, некоторые из которых включают в себя PDO-драйверы, предназначенные для доступа к Free TDS, Sybase, Microsoft SQL Server, IBM DB2, Firebird/Interbase 6, Oracle Call Interface и PostgreSQL, и многие другие.
Драйверы не доступны автоматически в каждой системе, поэтому вам нужно будет найти доступные драйверы и добавить те, которые вам нужны.
Существует различные синтаксические, чтобы установить соединение с базой данных, которые зависят от конкретных баз данных. При использовании PDO вы хотите убедиться, что ваши операции завернуты в блоки try/catch и что вы используете метод исключения.
В обычных случаях необходимо установить только одно соединение, а соединения закрыты, программируя дескриптор базы данных как нуль. Вы можете найти более конкретные параметры и синтаксис на разных ресурсных сайтах.
PDO позволяет использовать исключения для обработки ошибок, поэтому вы посоветовали обернуть PDO в Try/улове блоках. Таким образом, PDO может быть принудительно введен в соответствующий атрибут режима ошибки, чтобы создать исключение.
Существует три режима молчания (по умолчанию), предупреждения и исключения. Последние два более полезны в программировании DRY. Режим «Предупреждение» полезен для отладки, а режим «исключение» позволяет грациозно обрабатывать ошибки, скрывая данные, которые человек может использовать для использования вашей системы.
PDO конденсируется общие операции с базой данных вставки и обновления в простой двухступенчатый процесс: Prepare >> [Bind] >> Execute
. С помощью этого метода вы можете в полной мере использовать подготовленные заявления PDO, которые предлагают вам защиту от вредоносных атак посредством SQL-инъекции.
Подготовленные операторы представляют собой предзаказанные операторы SQL, которые могут выполняться несколько раз, отправляя эти данные на серверы. Они выгодны тем, что данные, используемые в заполнителях, автоматически защищены от атак SQL-инъекций.
Следовательно, лучше использовать PDO, и это позволит избежать SQL-инъекций, которые преобладают сейчас в течение нескольких дней.
PDO код, чтобы проверить существует ли имя пользователя и пароли полей в БД:
<?php
//Connections
try {
$handler = new PDO('mysql:host=localhost;dbname=s','root', '*');
$handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e){
exit($e->getMessage());
}
$name = $_POST['name'];
$username = $_POST['username'];
$email = $_POST['email'];
$password = $_POST['password'];
$password1 = $_POST['passwordconf'];
$ip = $_SERVER['REMOTE_ADDR'];
//Verifcation
if (empty($name) || empty($username) || empty($email) || empty($password) || empty($password1)){
$error = "Complete all fields";
}
// Password match
if ($password != $password1){
$error = "Passwords do not match";
}
// Email validation
if (!filter_var($email, FILTER_VALIDATE_EMAIL)){
$error = "Enter a Valid email";
}
// Password length
if (strlen($password) <= 6){
$error = "Choose a password longer then 6 character";
}
if(!isset($error)){
//no error
$sthandler = $handler->prepare("SELECT username FROM users WHERE username = :name");
$sthandler->bindParam(':name', $username);
$sthandler->execute();
if($sthandler->rowCount() > 0){
echo "User Already Exists.";
} else {
//Securly insert into database
$sql = 'INSERT INTO users (name ,username, email, password, ip) VALUES (:name,:username,:email,:password,:ip)';
$query = $handler->prepare($sql);
$query->execute(array(
':name' => $name,
':username' => $username,
':email' => $email,
':password' => $password,
':ip' => $ip
));
}
}else{
echo "error occured: ".$error;
exit();
}
Надежда так что ссылка может быть полезна для Вас, чтобы разработать коды в будущем проекте самостоятельно.
'mysql_query' мертв, он был удален из PHP 7. Пожалуйста, прекратите использовать его и, по крайней мере, используйте' mysqli'. PDO - еще лучший вариант. – tadman
** ПРЕДУПРЕЖДЕНИЕ **: Написание собственного уровня контроля доступа непросто, и есть много возможностей, чтобы заставить его серьезно ошибиться. Пожалуйста, не пишите свою собственную систему аутентификации, если какая-либо современная [инфраструктура разработки] (http://codegeekz.com/best-php-frameworks-for-developers/), например [Laravel] (http://laravel.com/) поставляется с надежной системой аутентификации (https://laravel.com/docs/5.2/authentication). В абсолютном порядке следуйте рекомендациям по безопасности (http://www.phptherightway.com/#security) и ** никогда не храните пароли в виде обычного текста **. – tadman
Могу ли я зарегистрироваться, используя имя пользователя "**' foo 'AND' 0 '=' 1' ** "?(Я хочу зарегистрироваться несколько раз, используя то же имя пользователя.) – spencer7593