Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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>";
}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!
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();
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/
Muito obrigado pela dica de vocês :D
Mais preciso tratar esse erro no cenário em que estou hoje
Alguém poderia me ajudar?
A melhor forma é o que está escrito no post #5.
A mais rápida está em todos os outros.
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!
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')
Entendi.
Abraços!
use assim '".addslashes($row->CIDADE)."',