Pergunta

Eu estou tentando fazer upload de um arquivo .pdf em um banco de dados mysql usando php.

É tudo bom, exceto para o conteúdo do arquivo. Não importa como eu parecem tentar escapar caracteres especiais, a consulta sempre falha, principalmente com "Comando desconhecido \ n".

Eu addslashes, mysql_real_escape_string, removeslashes etc usado.

Alguém tem alguma idéia de como escapar o conteúdo do arquivo?

Muitos Obrigado,

Foi útil?

Solução

Eu usei a seguinte sequência de antes, que parece funcionar bem, e irá armazenar todos os dados no db, incluindo imagens, pdfs, matrizes de dados, etc ...:)

armazenar os dados (pode ser uma cadeia de caracteres, matriz, objeto, etc.);

Em primeiro lugar, transformar os dados em uma string codificada base64

$strData = strtr(
             base64_encode(
               addslashes(
                 gzcompress( serialize($dataToStore) , 9)
                 )
               ) , '+/=', '-_,');

Em seguida, armazenar esses dados de cadeia no db ...


Recuperação de dados;

Extrair os dados de cadeia a partir do db

decodificar a volta de dados para o que você quer (pode ser necessário realizar uma etapa extra após este dependendo dos dados de entrada, gama, imagem, etc.)

$returnData = unserialize(
                gzuncompress(
                  stripslashes(
                    base64_decode(
                      strtr($strDataFromDb, '-_,', '+/=')
                    )
                  )
                )
              );

Isso certamente me ajudou a guardar o que eu precisava para armazenar em um banco de dados mysql!

Outras dicas

Eu não vejo por que você iria querer armazenar um arquivo em um banco de dados, mas eu sugiro que você dê uma olhada em instruções preparadas .

Adivinhe: você pode estar encontrando erros devido à incompatibilidade entre conjuntos de caracteres. PDF é provavelmente um arquivo binário, então você precisa se certificar de que coluna db está configurado para lidar com isso isso.

Ao lado do problema escapar você pode executar em "pacote muito grande" erros se o (MySQL) variável de sistema max_allowed_packet está definido como um "valor pequeno".
Usando a extensão mysqli, elaborou demonstrações e mysqli_stmt :: send_long_data você pode evitar ambos os problemas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top