保存在mysql表中时,文件名中不包含文件格式

时间:2015-03-06 15:15:49

标签: php mysql

出于某种原因,当我上传文档并将文件名存储在mysql表中时,文件名扩展名不包含在名称中。例如,我上传了pdf文件" car.pdf"它存储在mysql表中的方式是" car。"(请参阅单词后面的句点,不包括文件扩展名)。我查了一下这个网站,我也用Google搜索过,但找不到明确的答案。

    $doc_name = mysqli_real_escape_string($dbc, trim($_FILES['doc']['name']));
    $doc_type = $_FILES['doc']['type'];
    $doc_size = $_FILES['doc']['size'];
            if(!empty($title)){
            if(!empty($doc_name)){
                if (($doc_type == 'application/pdf') || ($doc_type == 'application/msword') || ($doc_type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document')){
                    if(($doc_size > 0) && ($doc_size <= FILE_MAXFILESIZE)){
                        if ($_FILES['doc']['error'] == 0) {
                        $final_name = time() . $doc_name;
                        $target = $uploadpath . $final_name;
                            if(move_uploaded_file($_FILES['doc']['tmp_name'], $target)) {
                                $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die ('There was a problem with your query. Please, contact administrator'); 

                                if(!empty($description)){
                                $query = "INSERT INTO uploaded_files (file, title, description, date_time, user_id, dep_id) VALUES ('$final_name', '$title', '$description', now(), '" . $_SESSION['user_id'] . "', '$dep_id')";
                                }.... rest of the code goes here

1 个答案:

答案 0 :(得分:0)

如果字符串的长度超过了列定义中的字符串,MySQL可能会截断您要插入的字符串。在这种情况下,请检查文件路径名称的字符串名称是否长于32。

通常,人们会期望此INSERT查询失败,但如果配置设置允许则可能不会这样做。

如果mysql配置在您的控制之下(并且您希望避免对插入的字符串进行此类静默截断),请首先将strict_trans_tables添加到sql_mode中的my.ini设置中(或my.conf)文件。

祝你好运。