-2

一部の mysql セルの内容を変更するコードを php で作成しましたが、コードがエラーを返しています。SQL 構文にエラーがあります。1 行目の '( datanasc, rg, rgemissor, cpf, sexo, cnh, ' の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してくださいtituloeleitorzonaeleitoral

    <?php
    include('mysql.php');
    mysql_select_db("teste", $conexao);

    $schema = array('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', 'linkfoto');
    $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("UPDATE funcionarios SET(".implode(",",$fields).") VALUES(".implode(",",$values).")") or die(mysql_error());
    echo "Funcionário modificado com sucesso.";


    mysql_close($conexao)
    ?>
4

4 に答える 4

2

基本的に、「INSERT」の代わりに「UPDATE」という単語を使用した INSERT ステートメントを使用しているため、クエリの形式が正しくありません。

update ステートメントは次のように構成されています。

UPDATE table_name SET column = value WHERE column = conditional_value;

次のように UPDATE を実行しようとしていますが、

UPDATE table_name SET(column) VALUES(value);
于 2013-07-19T12:40:27.687 に答える
1

の正しい構文update

UPDATE table_name
SET column_name = value, column_2 = value....
WHERE column1 = value

しかし、あなたのクエリはそれを次のように生成します

UPDATE funcionarios SET column1,column2,... VALUES val1,val2,...
于 2013-07-19T12:40:28.170 に答える
0

この行を変更します。

"`".mysql_real_escape_string($val)."`";

"'".mysql_real_escape_string($val)."'";

列をエスケープする必要はありません

"`".($key)."`"

次に、コードを次のように変更します。

foreach($_POST as $key => $val){
        if (in_array($key, $schema)){
            $updates[] = " `$key` =  '".mysql_real_escape_string($val)."'";
        }
}

そしてこの行:

$ins = mysql_query("UPDATE funcionarios SET ".implode(", ", $updates)) or die(mysql_error());
于 2013-07-19T12:40:43.333 に答える
0

これは、エラーのためにクエリが正しくないことを意味します。クエリ (「更新...」) を印刷して、構造を確認し、クエリのどこにエラーがあるかを確認します。また、更新ステートメントが正しくありません。

于 2013-07-19T12:41:08.040 に答える