ti-enxame.com

Consulta ao banco de dados em que o valor () é um número

Como sabemos, todos os valores definidos em uma consulta ao banco de dados devem sempre ser escapados no Joomla usando $db->quote($value).

Ao definir números como uma variável, normalmente se usaria (int) Para defini-lo como um número inteiro.

Então, o que alguém faria ao definir um número como valor em uma cláusula where() para uma consulta ao banco de dados? Nós o definiríamos apenas como um número inteiro assim:

$id = (int)555;
->where($db->quoteName('id') . ' = ' . $id);

ou apenas precisaríamos citá-lo da seguinte forma:

$id = 555;
->where($db->quoteName('id') . ' = ' . $db->quote($id));

ou faríamos os dois?

$id = (int)555;
->where($db->quoteName('id') . ' = ' . $db->quote($id));

Alguém por favor poderia lançar alguma luz apenas para que eu saiba para referência futura, por favor?

6
Lodder

Boa pergunta para este. Eu já estive nessa consideração muitas vezes também. Não tenho certeza se existe uma resposta certa e também não tenho certeza se minha resposta será totalmente correta e claramente explicada.

Pelo que vi até agora, o banco de dados entenderá uma consulta que contém um número/número inteiro em uma instrução where e a comparará com seu conjunto de registros, mesmo que o campo que estamos comparando seja definido como (INT), (TEXT ), (VARCHAR) ou (CHAR), com ou sem aspas.

No entanto, um dos pontos críticos nesses casos é ter consistência ao consultar o banco de dados com os tipos de dados corretos. Portanto, ao procurar um campo INT, a variável incluída na consulta sempre deve ser transformada em um número inteiro.

Fazendo isso e passando um número inteiro para o banco de dados, estamos um pouco seguros de quais dados estamos enviando ... O banco de dados entenderá e processará a consulta.

Dos meus testes com este caso, minha conclusão geral é que citar o número inteiro não fará diferença nos resultados e em toda a estabilidade. (A menos que haja casos específicos nos quais não consigo pensar no momento, onde citar ou não um número inteiro resultará em resultados diferentes ou indesejados). Portanto, parece que tudo se resume ao estilo de codificação e à consistência do código.

Com o exposto acima, parece que não é realmente necessário citar um número inteiro.

Será interessante investigar isso em todo o núcleo do Joomla, ver extensivamente suas práticas ou, melhor ainda, receber sugestões de alguém com amplo conhecimento e experiência sobre esse tópico.

3
FFrewin