me@helium 8 anni fa
parent
commit
e32950a5c8
1 ha cambiato i file con 17 aggiunte e 0 eliminazioni
  1. 17 0
      PDO.md

+ 17 - 0
PDO.md

@@ -40,6 +40,7 @@ http://pdo.asmer.php1.a-level.com.ua/init.php
 Выше в коде показан один из способов выполнения запросов: использование метода `query` объекта класса PDO (`$dbh`, *database handler*) 
 с текстом запроса. `query` возвращает объект класса `PDOStatement`, который можно итерировать.
 
+## Запрос и его подготовка.
 Существует так же более безопасный и в определенных случаях более быстрый двухэтапный способ:
 
 ```php
@@ -60,3 +61,19 @@ try {
 
 http://pdo.asmer.php1.a-level.com.ua/prepare.php
 
+Как видно, данные не передаются в запрос не как часть строки запроса, а в последствии в качестве ассоциативного массива. Несмотря на схожесть с 
+предыдущим способом, запрос действительно *подготавливается* СУБД, после чего он выполняется быстрее, так как ему только передаются данные.
+Ко всему прочему это сводит на нет возможность SQL инъекций через поля.
+
+### Задание.
+
+Заполнить таблицы базы данных `blog` с помощью `PDO::prepare`. 
+
+## Практикум: NoPMA
+
+Сделать простую одностраничную SQL-консоль, нечто среднее между `mysql` в консоли и `PHPMyAdmin`:
+1. Спросить логин, пароль и СУБД в форме. Проверить с помощью `PDOException`, если удачно, сохраняем в сессию.
+2. Если в сессии уже есть логин, пароль и СУБД, то показываем `textarea` для запроса.
+3. По отправке формы с полем ввода запроса передаем запрос в `query`, результат выводим в HTML-таблицу, если это выборка. Текст запроса должен сохранится
+   в `textarea` над HTML таблицей. Под `textarea` выводится текст ошибки или количество записей, задействованных в запросе.
+4. Для шаблонизации используем `twig`.