Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save hollowbash/b13cda4522d23f5e45f25eea62674d10 to your computer and use it in GitHub Desktop.
Save hollowbash/b13cda4522d23f5e45f25eea62674d10 to your computer and use it in GitHub Desktop.
Основные команды и сниппеты при использовании PDO
<?php
// Основные команды и сниппеты при использовании PDO
//Соединение с БД
$db = new PDO('mysql:host=localhost;dbname=mini-site', 'root', '');
// 1. Выбор данных из БД без защиты
$username = 'Joker';
$password = '555';
$sql = "SELECT * FROM users WHERE name = '{$username}' AND password = '{$password}' LIMIT 1";
$result = $db->query($sql);
echo "<h2>Выборка записи без защиты от SQL инъекций</h2>";
if ($result->rowCount() == 1 ) {
$user = $result->fetch(PDO::FETCH_ASSOC);
echo "Имя пользователя: {$user['name']} <br>";
echo "Пароль пользователя: {$user['email']} <br>";
// 2. Выбор данных из БД с защитой от SQL инъекций - в ручном режиме
$username = 'Joker';
$password = '555';
$username = $db->quote( $username );
$username = strtr($username, array('_' =>'\_', '%' => '\%') )
$password = $db->quote( $password );
$password = strtr($password, array('_' =>'\_', '%' => '\%') )
$sql = "SELECT * FROM users WHERE name = '{$name}' AND password = '{$password}' LIMIT 1";
$result = $db->query($sql);
echo "<h2>Выборка записи без защиты от SQL инъекций</h2>";
if ($result->rowCount() == 1 ) {
$user = $result->fetch(PDO::FETCH_ASSOC);
echo "Имя пользователя: {$user['name']} <br>";
echo "Пароль пользователя: {$user['email']} <br>";
}
// 3. Выбор данных из БД с защитой от SQL инъекций - в автовматиическом режиме
$sql = "SELECT * FROM users WHERE name = :username AND password = :password LIMIT 1";
$stmt = $db->prepare($sql);
$username = 'Joker';
$password = '555';
$stmt->bindValue(':username', $username);
$stmt->bindValue(':password', $password);
$stmt->execute();*/
// Если мы не хотим для каждого значения вызывать метод bindValue то можно сразу в ->execute
$stmt->execute(array(':username' => $username, ':password' => $password));
$stmt->bindColumn('name', $name);
$stmt->bindColumn('email', $email);
echo "<h2>Выборка записи с автоматической защитой от SQL инъекции: </h2>";
$stmt->fetch();
echo "Имя пользователя: {$name} <br>";
echo "Email пользователя: {$email} <br>";
// 4. Выбор данных из БД с защитой от SQL инъекций - в автовматиическом режиме. Другой вариант запроса
$sql = "SELECT * FROM users WHERE name = ? AND password = ? LIMIT 1";
$stmt = $db->prepare($sql);
$username = 'Joker';
$password = '555';
// Экранирование от передачи скриптов
// $username = htmlentities($username);
// $password = htmlentities($password);
$stmt->bindValue(1, $username);
$stmt->bindValue(2, $password);
$stmt->execute();
$stmt->bindColumn('name', $name);
$stmt->bindColumn('email', $email);*/
// Если мы не хотим для каждого значения вызывать метод bindValue то можно сразу в ->execute
$stmt->execute( array($username, $password));
echo "<h2>Выборка записи с автоматической защитой от SQL инъекции: </h2>";
$stmt->fetch();
echo "Имя пользователя: {$name} <br>";
echo "Email пользователя: {$email} <br>";
// Вставка данных в БД
$db = new PDO('mysql:host=localhost;dbname=mini-site', 'root', '');
// Готовим запрос в БД
$sql = "INSERT INTO users(name, email) VALUES (:name, :email)";
$stmt = $db->prepare($sql);
$username = "Flash";
$useremail = "[email protected]";
$stmt->bindValue(':name', $username);
$stmt->bindValue(':email', $useremail);
$stmt->execute();
// $stmt-execute( array(':username' => $username, ':password' => $password));
echo "<p>Было затронута строка: " . $stmt->rowCount() . "</p>";
echo "<p>ID вставленной записи: " . $db->lastInsertId() . "</p>";
// Обновление данных
$db = new PDO('mysql:host=localhost;dbname=mini-site', 'root', '');
$sql = "UPDATE users SET name = :name, email = :email WHERE id = :id";
$stmt = $db->prepare($sql);
$username = "New Flash";
$useremail = "[email protected]";
$id = '5';
$stmt->bindValue(':name', $username);
$stmt->bindValue(':email', $useremail);
$stmt->bindValue(':id', $id);
$stmt->execute();
echo "<p>Было затронуто строк: " . $stmt->rowCount() . "</p>";
// Удаление данных
$db = new PDO ('mysql:host=localhost;dbname=mini-site', 'root', '');
$sql = "DELETE FROM users WHERE name = :name";
$stmt = $db->prepare($sql);
$username = "New Flash";
$stmt->bindValue(':name', $username);
$stmt->execute();
echo "<p>Было затронуто строк: " .$stmt->rowCount(). "</p>";
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment