我有三个文件:
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.jp
或moods_logo_custom.
。我甚至尝试使用'Copy of (Custom).jpg
',但效果很好。
调用查询之前的回显显示$ filename是正确的。
那么究竟是什么产生了特定的文件名?为什么我不能将整个文件名存储在DB中?
答案 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 ""
希望这对你有用!