Ir para conteúdo

POWERED BY:

Arquivado

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

Giuliano Santos

Erro ao gravar dados que possui ( ' ) no banco

Recommended Posts

Fiz um código para copiar dados do Firebird para o MySQL que esta funcionando bonitinho. Só tem um problema:
Quando o nome a ser copiado de uma base para a outra possui ( ' ) como D'Ana apresenta o seguinte erro:

 

your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Ana', ' at line 26

 

Alguem saberia me dizer como posso resolver isso?

 

Segue a parte do código que faz a cópia:

//Grava informações na base MySQL
while ($row=ibase_fetch_object($busca)){

    $sql =mysql_query("REPLACE INTO cliente (	COD_CLIENTE,
                                                NOME,
                                                FANTASIA,
                                                TABELA,
                                                ENDERECO,
                                                BAIRRO,
                                                ESTADO,
                                                CIDADE,
                                                CEP,
                                                DICAS_ENDERECO,
                                                DDD,
                                                TELEFONE,
                                                CONTATO,
                                                DESATIVADO,
                                                COD_REPRESENTANTE,
                                                COD_FUNCIONARIO,
                                                PF_PJ,
                                                CPF,
                                                CNPJ,
                                                IE,
                                                E_MAIL_NFE,
                                                EMAIL,
                                                DATA_ATUALIZACAO
                                            ) 
                                            values (	'".$row->COD_CLIENTE."',
                                                        '".$row->NOME."',
                                                        '".$row->FANTASIA."',
                                                        '".$row->TABELA."',
                                                        '".$row->ENDERECO."',
                                                        '".$row->BAIRRO."',
                                                        '".$row->ESTADO."',
                                                        '".$row->CIDADE."',
                                                        '".$row->CEP."',
                                                        '".$row->DICAS_ENDERECO."',
                                                        '".$row->DDD."',
                                                        '".$row->TELEFONE."',
                                                        '".$row->CONTATO."',
                                                        '".$row->DESATIVADO."',
                                                        '".$row->COD_REPRESENTANTE."',
                                                        '".$row->COD_FUNCIONARIO."',
                                                        '".$row->PF_PJ."',
                                                        '".$row->CPF."',
                                                        '".$row->CNPJ."',
                                                        '".$row->IE."',
                                                        '".$row->E_MAIL_NFE."',
                                                        '".$row->EMAIL."',    
                                                        '".$data."'
                                                )", $mysql ) or die(mysql_error());
    $i++;
	
//Mostra progreção
    echo "<div style='background:#FFFFFF; position:absolute; top:97px; left:20px;'>$i Importados...</div>";
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi.

 

Por que não usa o Replace substituindo apóstrofe pelo apóstrofe de HTML?

$var = str_replace("'","'",$_POST['var']);

Abraços!

 

Fábio!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você ainda está utilizando a função mysql_ que foi descontinuada, passe a utilizar seu sucessor mysqli_ você tem que validar a entrada de dados. Utilize o

mysqli_real_escape_string();

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apesar de todas as respostas serem válidas, a melhor alternativa ainda é usar Prepared Statements.

Dessa forma o próprio SGBD faz todo o trabalho de escapar dados e proteger contra SQL Injection

 

Recomendo fazer isso usando PDO: http://rberaldo.com.br/pdo-mysql/

 

 

 

PS: funções mysql_* estão obsoletas desde o PHP 5.5 e já foram removidas no PHP 7. Prefira usar MySQLi ou PDO. Veja mais aqui: http://rberaldo.com.br/mysql-obsoleto-php/

Compartilhar este post


Link para o post
Compartilhar em outros sites

A melhor forma é o que está escrito no post #5.

 

A mais rápida está em todos os outros.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi.tudo bem?

O comando mysqli_real_escape_string();

Ele grava no Banco de Dados do jeito que vier o caractere?

Ele grava o ( ' ) como ( ' )mesmo?

No Caso se consulta, se no Banco tiverem HTML ( ' ), mas usar o comando mysqli_real_escape_string(); ele consegue identificar na busca?

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia.

 

Ela escapa todos os caracteres que possa confundir sua query. Por exemplo, no caso do apóstrofo:

 

Com o uso do mysqli_real_escape_string()

INSERT INTO `tabela` VALUES ('doidao\'s')

Sem o uso da função:

INSERT INTO `tabela` VALUES ('doidao's')

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.