-
-
Save hollowbash/b13cda4522d23f5e45f25eea62674d10 to your computer and use it in GitHub Desktop.
Основные команды и сниппеты при использовании PDO
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?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