I'm developing a system and am trying to simplify my life with basic querys of insert
and update
, and I came across a question:
Should I create a query for each case, or one that meets all cases, and do they have the same logic?
The querys that I have developed are these:
//$nome_tabela : nome da tabela sem o 'tb_'
//$info : vetor ordenado de informações a serem inseridas
//
//obs.: os indices do vetor devem ser o nome do respectivo campo
// sem o '_tabela'
//
private function pdo_cadastro($nome_tabela, $info) {
//montagem da query dinâmica
$cont_param = 0;
$sql = "INSERT INTO tb_$nome_tabela(";
foreach ($info as $index => $key) {
$sql .= $index . "_" . $nome_tabela . ", ";
$cont_param += 1;
}
$sql = substr_replace($sql, "", -2);
$sql .= ") VALUES (";
for ($i = 0; $i < $cont_param; $i++) {
$sql .= "?,";
}
$sql = substr_replace($sql, "", -1);
$sql .= ")";
//---------------------------------
//execução da query
try {
$prepara = $this->pdo->prepare($sql);
$controle = 1;
foreach ($info as $index => $key) {
$prepara->bindParam($controle, $info[$index], PDO::PARAM_INT);
$controle += 1;
}
$prepara->execute();
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
}
//$nome_tabela : nome da tabela sem o 'tb_'
//$info : vetor ordenado de informações a serem inseridas
//$campo_id : nome do campo do código identificador
//
//obs.: os indices do vetor devem ser o nome do respectivo campo
// sem o '_tabela'
//
private function pdo_edit($nome_tabela, $info, $campo_id) {
//montagem da query dinâmica
$cont_param = 0;
$sql = "UPDATE tb_$nome_tabela SET ";
foreach ($info as $index => $key) {
if($index!==$campo_id){
$sql .= $index . "_" . $nome_tabela . " = ?, ";
$cont_param += 1;
}
}
$sql = substr_replace($sql, "", -2);
$sql .= " WHERE ". $campo_id . "_" . $nome_tabela . " = ?" ;
//---------------------------------
try {
$prepara = $this->pdo->prepare($sql);
$controle = 1;
foreach ($info as $index => $key) {
$prepara -> bindParam($controle, $info[$index], PDO::PARAM_INT);
$controle += 1;
}
$prepara -> execute();
} catch (PDOException $e) {
print "Error!: " . $e -> getMessage() . "<br/>";
die();
}
}
I report everything I need on the call, telling me that the forms were built following the names of the columns in the DB. With this plus the table name and the ID field ( id
in my case e.g. id_cliente AUTO-INCREMENT PRIMARY
), I can perform these actions with only these two functions.
Is this a good practice or should I actually do one for each case?