2017-01-29 11 views
0

Я сделал метод запроса для своего класса, и он работает с получением данных из БД, но он не работает, когда я начинаю вставлять что-то.Как я могу повторно использовать мой метод запроса для вставки и извлечения данных из базы данных в PHP?

Мой метод запроса - это.

function query($sql, $params = array()) { 
     $query = $this->_conn->prepare($sql); 
     if(count($params)) { 
      $position = 1; 
      foreach($params as $param) { 
       $query->bindValue($position, $param); 
       $position++; 
      } 
     } 

     if($query->execute()) { //error is here based on the error message: SQLSTATE[42000] 
      $result = $query->fetchAll(PDO::FETCH_ASSOC); 
     } else { 
      return false; 
     } 


     return $result; 
    } 

И когда я вызываю запрос выше, у него была ошибка.

function insert($table, $data) { 
     if(count($data)) { 
      $keys = array_keys($data); 
      $values = ""; 

      $counter =1; 
      foreach($data as $field) { 
       $values .= "?"; 
       if($counter < count($field)) { 
        $values .= ", "; 
       } 
       $counter++; 
      } 
      $sql = "INSERT INTO {$table} (`". implode('`, `',$keys) ."`) VALUES {$values}"; 
      if($this->query($sql, $data)) { //calling the method above 
       return true; 
      } 
     } 

     return false; 
    } 

I think the error is in the query method and it only works fetching data. How can I make it flexible(like both working on fetching and insert etc. data)?

+0

UPDATE/INSERT заявление не возвращает набор результатов, только статус TRUE (т.е. он работал) FALSE (она не работал) – RiggsFolly

+0

PS: В будущем, пожалуйста, покажите нам сообщение об ошибке ПОЛНОГО – RiggsFolly

+0

@RiggsFolly Фатальной ошибку: неперехваченное исключения «PDOException» с сообщением «SQLSTATE [42000]: ошибка синтаксиса или нарушение доступа: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '???' в строке 1 'в C: \ wamp64 \ www \ security \ db.php в строке 30 ** ошибка в методе query() в элементе $ query-> execute() –

ответ

0

Сначала о вашей функции. Это чрезмерное и ограниченное в то же время. Что вам действительно нужно

function query($sql, $params = array()) { 
    $query = $this->_conn->prepare($sql); 
    $query->execute($params); 
    return $query; 
} 

Таким образом, вы будете иметь возможность получить существующую функциональность, просто называя его, как

$db->query($sql)->fetchAll(); 

но можно будет назвать его с любым другим видом запроса, включая удалять и вставлять, не говоря уже об использовании именованных заполнителей, а также позиционных и использовать другие связанные методы, такие как fetch() или rowCount()

Теперь к вашему сообщению об ошибке. Очевидно, что не имеет ничего общего с вашей функцией, но с QUERY вы запускаете. При запросе Как повторно использовать метод запроса для вставки запроса вы должны предоставить подлинный запрос на вставку, а не какой-то неверный PHP-код с ошибочным результатом. Очень важно убедиться, что ваши дела связаны с вашими словами. Хотите проверить запрос на вставку? Работайте с запросом, а не с PHP-кодом!

И наконец, чтобы вставить помощник. Помимо очевидных проблем с синтаксисом, это, по существу, prone to SQL injection, поэтому вам нужно в лизинге сбежать из ваших идентификаторов или еще лучше, но перечислить их в белый список.