Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

valter_djr

Query string muito extensa não está processando

Recommended Posts

Boa noite pessoal.

 

Estou com mais uma bucha aqui.

Tenho um form que possui 60 campos, e na hora de executar a query para inserir/alterar os dados no banco está dando erro. Com certeza ela supera e muito os 256 caracteres.

$_query = INSERT INTO tabela (campo1,campo2,campo3,campo4,...,campo60) VALUES (var1,var2,var3,var4...var(60)";

 

O problema também é que os nomes dos campos são grandes, e não posso mudá-los.

Alguma sugestão de como contornar?

Abraço a todos.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então pessoal, contei aqui e são exatamente 86 campos a serem processados.

O script não dá mensagem de erro. só não processa.

 

$_query = "INSERT INTO tabela (campo1,campo2,campo3,campo4,...,campo60) VALUES (var1,var2,var3,var4...var60)";
$_result = mysqli_query($dbconn,$_query);

if (!$_result) {
    // aborta o script
    // é aqui que o script está abortando
}

 

Desculpem a minha ignorancia, mas não existe um limite de caracteres numa string? Porque eu acho que está excedendo o numero de caracteres possiveis. E como é que faço pra colocar isso num array Jordan?

Abraço a todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não deu pra entender muito bem o seu problema devido a explicação...
Mas se está usando varchar como tipo de dado, é bem provável que esta estourando o tamanho máximo.

Tente trocar os campos que são longos para text.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

ini_set('display_errors', 1);
error_reporting(E_ALL);

 

coloca isso no inicio do seu codigo e posta o erro se aparecer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

ini_set('display_errors', 1);
error_reporting(E_ALL);

 

coloca isso no inicio do seu codigo e posta o erro se aparecer.

Bom dia Shini.

 

Coloquei o código acima, como voce sugeriu, mas como eu disse antes, não retorna erro.

 

$_query = "INSERT INTO tabela (campo1,campo2,campo3,campo4,...,campo86) VALUES (var1,var2,var3,var4...var86)";
$_result = mysqli_query($dbconn,$_query);
 
if (!$_result) {
    // é aqui que o script está abortando
    exit;
}

 

Fiz um teste aqui pra ver o tamanho da string "$_query", e ela está com 2080 caracteres. Seria esse o motivo?

Depois fiz um outro teste, colocando menos campos na string, e aí ele processa, mas só até o 10º campo.

Não sei como prosseguir.

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tamanho acho q n é. de um echo na sua sql e tente executar direto no banco.

veja se assim aparece o erro.

 

$_result = mysqli_query($dbconn,$_query) or die (mysqli_error($dbconn));

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fui pesquisar sobre isto e vi que os browsers possuem limite de caracteres nas urls, por exemplo o IE: http://support.microsoft.com/kb/208427
[Edited]E me parece que há limite de variáveis também, porém não achei nenhum fonte confiável para dar a certeza quanto a este dado.[/Edited]

Terás que encontrar outra maneira. Tente por POST, talvez funcione, e verifique também o post_max_size no php.ini (normalmente é 8MB por padrão).

Compartilhar este post


Link para o post
Compartilhar em outros sites

O m@ldito que fez o design dessa banco onde estou mexendo, devia morrer afogado no Tietê. Concordo que facilitar o entendimento dos campos das tabelas é muito bom, fundamental até, mas o cara usar um nome de campo com 25 letras é demais !!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como esses dados estão vindo para a pagina que fará o insert ?

 

Realmente, se estiver sendo enviado por querystring (valores passador na url) existem limitações.

Se for como formulário, isso já não deveria estar ocorrendo, pois até onde sei, ele não possui esse tipo de limitação, exceto se estiver enviando junto arquivos que ultrapassem o tamanho limite configurado no servidor.

 

Printa a query sql e veja se ela está com a sintaxe e respectivos valores corretos, bem como se não falta alguma aspa simples ou dupla em algum trecho do código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existe uma limitação de caracteres junto a inserção no SGBD, que é definido no driver responsável pelo SGBD e está configurado no php.ini. É muito comum esse problema quando insere-se textos muito longos. Entretanto, essa limitação está entre 2048 ou 4096 caracteres e é mais comum quando utiliza MsSQL ou algum driver que não é "nativo", por assim dizer, do PHP. MySQL é um driver que já vem previamente instalado, e normalmente não ocorre esse problema.

 

Sobre ser através de query string, se for por GET, há uma limitação fixa. Se for por POST, há uma limitação nas configurações do php.ini.

 

Mas sem sabermos o erro, fica muito abrangente achar que é o tamanho da string. Pode ser N fatores.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia amigos.

 

Como disse antes, a query não gera erros, somente não processa. Aí, revisando a query, fui testando campo por campo, cada um dos 86, um trabalho insano, serviço de presidiário mesmo. E aí numa certa altura, encontrei o problema. O imbecil que criou a tabela, além de faze-la com nomes de campos muito extensos, mudou um deles e não documentou. Bingo !!! Independentemente disso, a p$%&@ da string é e continua muito "monstra" e preciso arrumar outro jeito de fazer, mas no momento outras coisas mais urgentes no sistema requerem a minha atenção. Infelizmente não conheço muito de objetos pra fazer uma classe pra mexer com a parte de banco de dados, então, se alguém possuir uma que possa compartilhar comigo, agradeceria imensamente.

Agradeço também a todos que me ajudaram nesse tópico em especial.

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.