2

Hey Guys 理由がわからないという大きな問題があります..ファイルをデータベースにアップロードするフォームはほとんどありません.1つを除いてすべて正常に動作します..すべてで同じクエリを使用します(単純な挿入)。アップロードしようとしているファイルと関係があると思いますが、よくわかりません。

コードは次のとおりです。

if ($_POST['action'] == 'hndlDocs') {
$ref = $_POST['reference']; // Numeric value of
$doc = file_get_contents($_FILES['doc']['tmp_name']);


$link = mysqli_connect('localhost','XXXXX','XXXXX','documents');
mysqli_query($link,"SET autocommit = 0");

$query = "INSERT INTO documents ({$ref},
'{$doc}',
'{$_FILES['doc']['type']}')
;";
mysqli_query($link,$query);
if (mysqli_error($link)) {
    var_dump(mysqli_error($link));
    mysqli_rollback($link);
} else {
    print("<script> window.history.back(); </script>");
    mysqli_commit($link);
}

}

データベースには次のフィールドのみがあります。

DATABASE documents (
    reference INT(5) NOT NULL, //it is unsigned zerofill
    doc LONGBLOB NOT NULL, //this should contain the binary data
    mime_type TEXT NOT NULL // the mime type of the file php allows only application/pdf and image/jpeg
);

そして、私が得るエラーは次のとおりです。

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 '00001, '����' at line 1

アップデート:

VALUEただし、SQL クエリにを追加するのを忘れていました。addslashes()ファイルから収集されたコンテンツに追加する必要があり、それですべて完了です。

私はすべての助けに感謝します。乾杯!

4

1 に答える 1

2

VALUESキーワードを追加するのを忘れました。使用する構文のタイプINSERTは暗黙的です。したがって、3 つの値しか指定していないため、テーブルには 3 つの列しかないと想定されます。ただし、3 つ以上の列がある場合は、クエリで列名を明示的に定義する必要があります。

$query = "INSERT INTO documents VALUES ({$ref}, 
                                       '{$doc}', 
                                       '{$_FILES['doc']['type']}');";

あなたのクエリは脆弱ですSQL Injection。時間をかけて下の記事を読んでください

于 2012-10-26T10:59:18.600 に答える