Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tenho duas dúvidas. O bind_param do MySQLi me deixa preparado contra SQL Injection? Porque antes para proteger meus sistemas eu usava o seguinte método:
public function escapeAll ($value) {
if (is_array($value)) {
foreach ($value as $x => $nvl)
$value[$x] = $this->escapeAll($nvl);
}
elseif (is_string($value)) {
$value = addslashes(htmlentities($value));
}
return $value;
}
E outra dúvida, já que eu estou usando o MySQLi me recomendaram abstrair o SQL. Bom, realmente fica mais fácil, e mais "bonito" um código PHP onde uma query não aparece descaradamente. Aí por exemplo, para a cláusula WHERE eu criei o seguinte método.
public function WHERE ($fields, $seps="and") {
$size = count($fields);
$qry = "WHERE";
$x = 0;
$aon = is_array($seps);
foreach ($fields as $value => $operator) {
if ($x == ($size-1) && !$aon)
$seps = NULL;
$add = NULL;
if (substr($operator, -1, 1) == ")") {
$add = ")";
$operator = substr($operator, 0, -1);
}
$qry .= " ".$value.$operator."?".$add." ".($aon ? $seps[$x] : $seps);
$x++;
}
return $qry;
}
/*
WHERE:
Monta cláusula WHERE.
Parâmetro 1:
Array com chaves sendo os campos e valores sendo os operadores. Suporta encadeamento de valores. Exemplo: array (
"(campo1" => "="
"campo2" => ">)"
);
Resultará numa query "WHERE (campo1=? and campo2>?)".
Parâmetro 2:
Separador, pode ser uma string para um único separador, ou um array especificando cada separador para cada par de campos.
Retorno:
Cláusula WHERE.
*/
Mas em questão de desempenho, mesmo que afete apenas alguns microsegundos, perde para digitar a query diretamente?
Porque o que seria mais útil nisso, seria por exemplo, onde tenho um método capaz de receber 3 valores. Sendo que todos eles são opcionais para montar a cláusula WHERE. Por exemplo: campo1, campo2 e campo3.
É claro, tem a vantagem de abstração do SQL, mas de verdade, em um sistema que eu tenho 100% de certeza que não vou migrar, não vejo vantagem em abstrair, é claro, à não ser que não afete o desempenho.
Carregando comentários...