O meu código PHP usa um query builder bem simples (PDO->query()), mas na semana passada o Copilot viu o meu código e ele comentou que ele é vulnerável a um ataque do tipo "injeção de SQL", ele sugeriu eu separar a consulta dos parâmetros da consulta. Já que preciso mudar a minha query builder, então que seja mais ou menos no formato do Eloquent, mas hoje o dia foi terrível, eu e o Copilot ficamos o dia todo preso nesse código:
O Copilot trabalhou duro, e várias vezes ele reclamou que a minha codificação é uma porcaria; tentei fazer do jeito dele, e não deu certo.
Exausto, o Copilot me sugeriu executar uma consulta de cada vez, e para a minha perplexidade, eles funcionam de maneira separada. Eu inverti a ordem da consulta, e o código andou.
O Copilot pensou, pensou e pensou e concluiu que o problema era a função orderBy( ). Ele inventou um comando do tipo reset para a função orderBy( ), e agora consigo executar o meu programa do jeito que eu listei. A seguir eu mostro o query builder que eu chamei de semiLaravel. O Laravel coloca todas as classes na pasta Model, no PHP eu não trabalho com nenhuma pasta. No caso do banco de dados, eu joguei tudo dentro do arquivo config.php, assim:
listagem parcial do arquivo config.php
class bd {
private static $pdo;
private static $initialized = false;
private static $orderBy = '';
static function initialize() {
if (!self::$initialized) {
$dsn = 'mysql:host=' . HOST . ';dbname=' . DBNAME;
self::$pdo = new PDO($dsn, USER, PASSWORD);
self::$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
self::$initialized = true;
}
}
protected static function getPdo() {
self::initialize();
return self::$pdo;
}
protected static function getTableName() {
return ''; // Será implementado na classe filha
}
public static function orderBy($column, $direction = 'ASC') {
self::$orderBy = "ORDER BY $column $direction";
return new static;
}
public static function select($columns = '*', $conditions = []) {
self::initialize();
$table = static::getTableName();
if (is_array($columns)) {
$columns = implode(', ', $columns);
}
$whereClause = '';
if (!empty($conditions)) {
foreach ($conditions as $condition) {
$field = $condition[0];
$operator = $condition[1];
$value = $condition[2];
$whereClause .= "$field $operator :$field AND ";
}
$whereClause = 'WHERE ' . rtrim($whereClause, ' AND ');
}
$sql = "SELECT $columns FROM $table $whereClause";
if (self::$orderBy) {
$sql .= ' ' . self::$orderBy;
self::$orderBy = ''; // Reset orderBy after use
}
$stmt = self::getPdo()->prepare($sql);
if (!empty($conditions)) {
foreach ($conditions as $condition) {
$field = $condition[0];
$value = $condition[2];
$stmt->bindValue(":$field", $value);
}
}
$stmt->execute();
return $stmt->fetchAll(PDO::FETCH_OBJ);
}
}
class tbdiario extends bd {
protected static function getTableName() {
return 'tbdiario';
}
}
class tbconta extends bd {
protected static function getTableName() {
return 'tbconta';
}
}
class tbusuarios extends bd {
protected static function getTableName() {
return 'tbusuarios';}}
?>
Pergunta
Frank K Hosaka
O meu código PHP usa um query builder bem simples (PDO->query()), mas na semana passada o Copilot viu o meu código e ele comentou que ele é vulnerável a um ataque do tipo "injeção de SQL", ele sugeriu eu separar a consulta dos parâmetros da consulta. Já que preciso mudar a minha query builder, então que seja mais ou menos no formato do Eloquent, mas hoje o dia foi terrível, eu e o Copilot ficamos o dia todo preso nesse código:
if ($lcto) { $btnMenu = "Acrescenta Lançamento"; } else { $lcto = tbdiario::orderBy('lcto', 'DESC')->select('lcto')[0]->lcto+1; } $dia = isset($_SESSION['dia']) ? $_SESSION['dia'] : date('Y-m-d'); $ativo = tbconta::select('*', [['conta', '<', 201]]);
O Copilot trabalhou duro, e várias vezes ele reclamou que a minha codificação é uma porcaria; tentei fazer do jeito dele, e não deu certo.
Exausto, o Copilot me sugeriu executar uma consulta de cada vez, e para a minha perplexidade, eles funcionam de maneira separada. Eu inverti a ordem da consulta, e o código andou.
O Copilot pensou, pensou e pensou e concluiu que o problema era a função orderBy( ). Ele inventou um comando do tipo reset para a função orderBy( ), e agora consigo executar o meu programa do jeito que eu listei. A seguir eu mostro o query builder que eu chamei de semiLaravel. O Laravel coloca todas as classes na pasta Model, no PHP eu não trabalho com nenhuma pasta. No caso do banco de dados, eu joguei tudo dentro do arquivo config.php, assim:
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.