Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将上传的文件存储到MySql时出现问题_Php_Mysql_File Upload_Referential Integrity - Fatal编程技术网

Php 将上传的文件存储到MySql时出现问题

Php 将上传的文件存储到MySql时出现问题,php,mysql,file-upload,referential-integrity,Php,Mysql,File Upload,Referential Integrity,嗨,我目前正在为我的学位项目开发一个快速原型。我有一个以前的表单,用户将从动态下拉列表中选择一些选项,当这些选项被保存到表中时,下一个页面将供用户上传文件。然后将该文件存储到一个单独的表中,其中外键引用另一个表。问题在于文件上传页面,我没有包含表示外键的变量,因为我想看看是否可以先让它工作。如果有人能帮忙,我将不胜感激 我收到的错误可能是因为上载文件的名称在insert查询的字段中不是有效的列名,或者 如果尝试更改sql,则无法在子表上执行插入或更新,因为引用完整性被破坏 我胖了吗?我已经被困了

嗨,我目前正在为我的学位项目开发一个快速原型。我有一个以前的表单,用户将从动态下拉列表中选择一些选项,当这些选项被保存到表中时,下一个页面将供用户上传文件。然后将该文件存储到一个单独的表中,其中外键引用另一个表。问题在于文件上传页面,我没有包含表示外键的变量,因为我想看看是否可以先让它工作。如果有人能帮忙,我将不胜感激

我收到的错误可能是因为上载文件的名称在insert查询的字段中不是有效的列名,或者

如果尝试更改sql,则无法在子表上执行插入或更新,因为引用完整性被破坏

我胖了吗?我已经被困了几个小时了

这是php

if (isset($_POST['action']) and $_POST['action'] == 'upload')
{

$uploadfile = $_FILES['upload']['tmp_name'];
$uploadname = $_FILES['upload']['name'];

if(is_uploaded_file($uploadname)) {


$uploadtype = $_FILES['upload']['type'];
$uploaddata = file_get_contents($uploadfile);



// Prepare user-submitted values for safe database insert

$uploadname = mysql_real_escape_string($uploadname);
$uploadtype = mysql_real_escape_string($uploadtype);
$uploaddata = mysql_real_escape_string($uploaddata);

$sql = "INSERT INTO product_logs (fileName, mimeType, fileData)
        VALUES (".$uploadname.",".$uploadtype.",".$uploaddata.")";
$exesql=mysql_query($sql) OR die(mysql_error());
}
else {
echo 'Error: File could not be uploaded.';
}   
}
include("file.html.php");  
这是文件.html.php

<form action="" method="post" enctype="multipart/form-data">
        <div>
            <label for="upload">Upload File:
            <input type="file" id="upload" name="upload"/></label>
        </div>
        <div>
            <input type="hidden" name="action" value="upload"/>
            <input type="submit" value="Upload"/>
        </div>
    </form>

你忘了这里有一句话

$sql = "INSERT INTO product_logs (fileName, mimeType, fileData)
VALUES ('".$uploadname."','".$uploadtype."','".$uploaddata."')";

并停止使用
mysql.*
其已弃用版本,使用
mysqli
pdo
您在查询中忘记了在值周围加引号:

$sql = "INSERT INTO product_logs (fileName, mimeType, fileData)
        VALUES ('".$uploadname."','".$uploadtype."','".$uploaddata."')";
                ^--             ^ ^               ^ ^               ^
请注意,在数据库中存储文件很少是一个好主意,并且会导致以后的重大问题

如果您允许大量上载,请注意,在内存中保存两个上载文件副本会浪费大量内存。一个稍微不那么糟糕的方法是

$sql = "INSERT .... " . mysql_real_escape_string(file_get_contents(...));

至少为您保存一份文件的空间

您应该像-

$sql = "INSERT INTO product_logs (fileName, mimeType, fileData)
        VALUES ('".$uploadname."','".$uploadtype."','".$uploaddata."')";
正如我们所看到的,您的表名是product_logs

您能否共享product_logs表的结构?以便我们更好地澄清您的问题


感谢

字段类型Null Key默认额外logID int(5)无PRI Null自动增量日期创建日期无Null MALSURTID int(6)无MUL Null mimeType varchar(50)无Null fileData mediumblob无Null文件名varchar(255)无Null所以您必须输入DATECUREATED,由于这些字段也不为null,因此在sql语句中也会出现malResultID。另一个问题-malResultID是其他表中的外键吗?很抱歉,我用结构Im重新编辑了我的原始帖子,有点新手,所以如果我将它们设置为null,这将允许我尝试上传,看看是否有效?非常感谢您的回复,如果您将dateCreated、malResultID设置为null,则上述语句应该有效。希望这能解决你的问题。谢谢我的朋友帮了我很大的忙我真不敢相信我做了这么愚蠢的事。再次非常感谢大家我设法解决了这个问题。
$sql = "INSERT INTO product_logs (fileName, mimeType, fileData)
        VALUES ('".$uploadname."','".$uploadtype."','".$uploaddata."')";