2

嘿,伙计们,我有一个大问题,我不知道为什么..我几乎没有将文件上传到数据库的表单,除了一个之外,所有表单都可以正常工作..我全部使用相同的查询(简单插入)。我认为这与我尝试上传的文件有关,但我不确定。

这是代码:

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 回答