在MySQL中存储特定文件名时,文件扩展名是条带化的

时间:2009-12-08 20:25:19

标签: php mysql

我有三个文件:
1. moodsLogo.jpg
2.(图像')的副本.jpg
3.心情标志(自定义).jpg

我有以下代码:

// (..) some code here
$fileName     = valid_filename($_FILES[ 'Filedata' ][ 'name' ]);
$bl->updateFieldValue("tableName","columnName",$fileName, $id);

function valid_filename($filename)
{
    $filename = str_replace(" ", "_", $filename);
    $pattern = "/[^[a-z0-9._-]/";
    return preg_replace($pattern, "", strtolower($filename));
} 

SQL看起来像这样:

  public function updateFieldValue($table,$column,$value, $id)
  {
    $result = parent::updateRow($table,$column, $value, $id);  
    return $result;
  }

  public function updateRow($table,$column, $value, $id)
  {
    $sql = "UPDATE $table SET $column = '$value' WHERE id = $id";
    $this->query($sql);
    return $this->query_result;    
  }

现在,处理文件1和2工作正常。在我的数据库中,我可以看到带有扩展名的整个文件名。

但是当我处理文件3时,文件名存储为moods_logo_custom.jpmoods_logo_custom.。我甚至尝试使用'Copy of (Custom).jpg',但效果很好。

调用查询之前的回显显示$ filename是正确的。

那么究竟是什么产生了特定的文件名?为什么我不能将整个文件名存储在DB中?

3 个答案:

答案 0 :(得分:0)

检查数据库架构,以查看表$column上的字段(在代码中引用为$table)是否设置为:

column_name VARCHAR(20)

或者可能:

column_name CHAR(20)

您可能需要ALTER表格以允许更长的字符串。

答案 1 :(得分:0)

可能是您存储名称的字段的字段长度吗? 值moods_logo_custom.jp的长度是20个字符,或者这只是巧合吗?

答案 2 :(得分:0)

这是一个SQL命令,它会扩展列的宽度以容纳更长的字符串,因为这似乎是你遇到的问题。

ALTER TABLE __table__ MODIFY COLUMN __column__ VARCHAR(128) NOT NULL DEFAULT ""

希望这对你有用!