2015-02-12 2 views
0

Я новичок в PDO и создаю класс. Я хочу сделать код максимально чистым и иметь как можно больше страниц. Я планирую на отправку имен столбцов и таблиц в качестве параметра:Можно ли отправить имя таблицы в качестве параметра

function get($column, $table, $where) { 
     global $db; 
     $query = 'SELECT '.$column.' FROM '.$table.' WHERE '.$where.''; 
     try { 
      $statement = $db->prepare($query); 
      $statement->execute(); 
      $result = $statement->fetchAll(); 
      $statement->closeCursor(); 
      return $result; 
     } catch (PDOException $e) { 
      $error_message = $e->getMessage(); 
      display_db_error($error_message); 
     } 
    } 

Он отлично работает, но мне интересно, насколько безопасно будет рассматриваться.

+2

Ваш код небезопасен. Если вы не тестируете $ column, $ table и $, где какое-то место в вашем коде, это созрело для SQL-инъекции. Я не буду делать то, что вы планируете делать. Это путь к сумасшедшим ошибкам и ошибкам. Разрешить пользователю управлять доступом к таблице, очевидно, является серьезным недостатком в дизайне вашего приложения. – Halfstop

+0

Спасибо. Это то, что мне было интересно. Я ценю вашу помощь. –

+0

Без проблем, рад, что я мог бы помочь. Если вы хотите написать меньше кода, я рекомендую использовать фреймворк вроде Symfony. Это дает вам наше превосходное кодирование и работает на более высоком уровне. – Halfstop

ответ

3

Ваш код небезопасен. Если вы не тестируете $ column, $ table и $, где какое-то место в вашем коде, это созрело для SQL-инъекции. Я не буду делать то, что вы планируете делать. Это путь к сумасшедшим ошибкам и ошибкам. Разрешить пользователю управлять доступом к таблице, очевидно, является серьезным недостатком в дизайне вашего приложения.

Смежные вопросы