построение db-запроса с помощью цикла for

Я сделал функцию для запроса к базе данных. Эта функция принимает массив, идентификатор пользователя, который я хочу обновить, и операцию запроса.

если операция запроса UPDATE

если вы посмотрите на код ниже, будет ли это хорошей практикой кодирования или это плохой код?

public function query($column, $search_value, $query_operation = "SELECT"){ if(strtoupper($query_operation == "UPDATE")){ $query = "UPDATE users SET "; if(is_array($column)){ $counter = 1; foreach($column as $key => $value){ if($counter < count($column)){ $query .= $key . ' = ?, '; }else{ $query .= $key . ' = ? '; } $counter++; } $query .= "WHERE id = ?"; $stmt = $this->database->prepare($query); $counter = 1; foreach($column as $key => &$value){ $stmt->bindParam($counter, $value); $counter++; } $stmt->bindParam($counter, $search_value); if($stmt->execute()){ $stmt = $this->database->prepare("SELECT* FROM users WHERE id = ?"); $stmt->bindParam(1, $search_value, PDO::PARAM_INT); $stmt->execute(); return $this->build_array($stmt); } } } } 

хотелось бы услышать некоторые отзывы.

Я бы не смешивал SELECT и UPDATE в той же функции.

Следующая функция обновления использует массивы для имен столбцов и значения $columnNames & $values с использованием неназванных параметров.

 function update($tableName,$columnNames,$values,$fieldName,$fieldValue){ $sql = "UPDATE `$tableName` SET "; foreach($columnNames as $field){ $sql .= $field ." = ?,"; } $sql = substr($sql, 0, -1);//remove trailing , $sql .= " WHERE `$fieldName` = ?"; return $sql; } 

Поскольку имена таблиц и столбцов не могут передаваться как параметры в PDO, я продемонстрировал белый список имен таблиц.

 $tables = array("client", "Table1", "Table2");// Array of allowed table names. 

Также array_push() добавляет значение для последнего параметра (WHERE) в массив $ values

использование

 if (in_array($tableName, $tables)) { $sql = update($tableName,$columnNames,$values,$fieldName,$fieldValue); array_push($values,$fieldValue); $STH = $DBH->prepare($sql); $STH->execute($values); } 

Вы можете использовать аналогичную технику для SELECT