2013-07-16 135 views
-5

我有一個簡單的代碼從PHP到MySQL打印的相關信息,但每次我嘗試打印,我得到這個錯誤PHP和MySQL錯誤

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''idfunc', 'nomefunc', 'rg', 'rgemissor', 'cpf', 'cnh', 'reservista', 'estrangeir' at line 1 

我的代碼是:

<?php 
    include('mysql.php'); 

    mysql_select_db("teste", $conexao); 

    $idfunc = $_POST['idfunc']; 
    $nomefunc = $_POST['nomefunc']; 
    $rg = $_POST['rg']; 
    $rgemissor = $_POST['rgemissor']; 
    $cpf = $_POST['cpf']; 
    $cnh = $_POST['cnh']; 
    $reservista = $_POST['reservista']; 
    $estrangeiro = $_POST['estrangeiro']; 
    $tituloeleitor = $_POST['tituloeleitor']; 
    $zonaeleitoral = $_POST['zonaeleitoral']; 
    $sindicato = $_POST['sindicato']; 
    $matsindical = $_POST['matsindical']; 
    $estadocivil = $_POST['estadocivil']; 
    $datanasc = $_POST['datanasc']; 
    $nacionalidade = $_POST['nacionalidade']; 
    $naturalidade = $_POST['naturalidade']; 
    $endereco = $_POST['endereco']; 
    $salario = $_POST['salario']; 
    $expediente = $_POST['expediente']; 
    $cargahoraria = $_POST['cargahoraria']; 
    $beneficiarios = $_POST['beneficiarios']; 
    $admissao = $_POST['admissao']; 
    $numeropis = $_POST['numeropis']; 
    $banco = $_POST['banco']; 
    $agencia = $_POST['agencia']; 
    $dataretroativo['dataretroativo']; 
    $datadispensa['datadispensa']; 
    $sexo['sexo']; 
    $nomepai['nomepai']; 
    $nomemae['nomemae']; 
    $funcao['funcao']; 



    $comando_sql="INSERT INTO funcionarios ('idfunc', 'nomefunc', 'rg', 'rgemissor', 'cpf', 'cnh', 'reservista', 'estrangeiro', 'tituloeleitor', 'zonaeleitoral', 'sindicato', 'matsindical', 'estadocivil', 'datanasc', 'nacionalidade', 'naturalidade', 'endereco', 'salario', 'expediente', 'cargahoraria', 'beneficiarios', 'admissao', 'numeropis', 'banco', 'agencia', 'dataretroativo', 'datadispensa', 'sexo', 'nomepai', 'nomemae', 'funcao') 
    VALUES ('$idfunc,'$nomefunc','$rg','$rgemissor','$cpf','$cnh','$reservista','$estrangeiro','$tituloeleitor','$zonaeleitoral','$sindicato','$matsindical','$estadocivil','$datanasc','$nacionalidade','$naturalidade','$endereco','$salario','$expediente','$cargahoraria','$beneficiarios','$admissao','$numeropis','$banco','$agencia','$dataretroativo','$datadispensa','$sexo','$nomepai','$nomemae','$funcao')"; 

    if (!mysql_query($comando_sql,$conexao)) 
    { 
    die('Error: Matricula ja cadastrada | <a href="/">Voltar ao cadastro</a>' .mysql_error()); 
    } 
    echo "Registro adicinado com sucesso!"; 

    mysql_close($conexao) 
    ?> 
    <a href="/">Voltar ao cadastro</a> 

我在論壇搜索了更多關於這個錯誤的問題,但沒有解決這個問題。

+0

字段名必須裝在'\' \'',而不是在' '''(高逗號) – AmazingDreams

+0

我總是看到這種類型的問題,你應該閱讀[PHP和MySQL的常見數據庫調試](http://jason.pureconcepts.net/2013/04/common-debugging-php-mysql/)。 –

+3

另外,*嘆* * SQL注入! [偉大的逃避現實(或:你需要知道如何處理文本中的文本)](http://kunststube.net/escapism/) – deceze

回答

0
$schema = array('idfunc', 'nomefunc', 'etc'); 
$fields = array(); 
$values = array(); 
foreach($_POST as $key => $val){ 
    if (in_array($key, $schema)){ 
     $fields[] = "`".mysql_real_escape_string($key)."`"; 
     $values[] = "'".mysql_real_escape_string($val)."'"; 
    } 
} 

$ins = mysql_query("INSERT INTO funcionarios(".implode(",",$fields).") VALUES(".implode(",",$values).")") or die(mysql_error()); 
+0

謝謝,這個工作得很好。 – caio

+0

我不認爲'mysql_real_escape_string'適合列名。 – tadman

2

列和表名稱需要用反引號引用,而不是單引號。

您添加的值可能需要引用 - 字符串和日期將會,但整數不會。你通常會爲這些使用單引號。

爲了避免這種錯誤,您應該重新編寫代碼爲:

INSERT INTO funcionarios (`idfunc`, `nomefunc`, `rg`, .... 

爲了避免SQL注入,你也應該看看移動到PDO或mysqli_ - 他們讓你寫的代碼,這是一個很多使用準備好的語句和綁定變量來保證安全

+0

內容編輯了一點,雖然我不熟悉ANSI_QUOTES在那裏說什麼。 – andrewsi

+0

已解決,但還給我另一個錯誤: 「字段列表」中的未知列'12321' – caio

+0

@caio - 其他錯誤是什麼?你可以編輯它到你的問題? – andrewsi

0

使用反引號,不是單引號,對列名:

$comando_sql="INSERT INTO funcionarios (`idfunc`, `nomefunc`, `rg`,....