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.

Revisions

  1. @trs2015 trs2015 created this gist Sep 22, 2018.
    141 changes: 141 additions & 0 deletions Работа с классом PDO
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,141 @@
    <?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>";

    ?>