Евгений Колесников před 3 roky
rodič
revize
01c389f71d
1 změnil soubory, kde provedl 25 přidání a 8 odebrání
  1. 25 8
      articles/api_php.md

+ 25 - 8
articles/api_php.md

@@ -410,18 +410,20 @@ class ApiServer
 
         // меняем алиасы на реальные данные
         $query->bindValue(':login', $_SERVER['PHP_AUTH_USER']);
-        
+
         // отправляем запрос на сервер
         $query->execute();
 
         // читаем полученный результат
-        $user = $query->fetch(FETCH_ASSOC);
+        $user = $query->fetch(PDO::FETCH_ASSOC);
         
         if ($user == null)
             throw new Exception('Пользователь не найден');
 
         if ($user->password != $_SERVER['PHP_AUTH_PW'])
             throw new Exception('Не верный пароль');
+
+        return $user;
     }
 
     private function connect()
@@ -452,17 +454,32 @@ class ApiServer
         ->fetchAll(PDO::FETCH_ASSOC);
     ```
 
-    Запрос с параметром (литерал `:login` заменяется перед запросом значением из массива, переданного в *execute*).
+* Запрос с параметрами
+
+    подгатавливаем шаблон запроса (вместо реальных данных - алиасы)
+
+    ```php
+    $query = $this->db
+        ->prepare("SELECT * FROM User WHERE login=:login")
+    ```
+
+    меняем алиасы на реальные данные. Это необходимо для защиты от SQL-иньекций (злоумышленник может в качестве логина послать строку `'ха-ха-ха'; drop table User;`)
+
+    ```php
+    $query->bindValue(':login', $_SERVER['PHP_AUTH_USER']);
+    ```
 
-    Метод *fetch* возвращает одну запись (строку)
+    выполняем запрос на сервер
 
     ```php
-    $user = $this->db
-        ->query("SELECT * FROM User WHERE login=:login")
-        ->execute([':login'=>$_SERVER['PHP_AUTH_USER']])
-        ->fetch();
+    $query->execute();
     ```
 
+    читаем полученный результат (метод *fetch* возвращает одну запись (строку))
+
+    ```php
+    $user = $query->fetch(PDO::FETCH_ASSOC);
+    ```
 
 * подключение к БД mysql