使用数据库中的id重命名文件

时间:2015-08-10 18:18:44

标签: php mysql sql file-upload

我正在使用原始名称上传图片文件。我将文件路径等上传到数据库,每个图像都在数据库中获得唯一的ID。直到这里一切正常。

现在,我想将上传的图像文件作为名称从数据库表中提供其唯一ID。 (例如,如果图像id是1,我希望文件被称为1.jpg等等。)我无法使它工作。

我不工作的方法:

数据库表

 TABLE `images`
 `image_id` INT(11) unsigned NOT NULL AUTO_INCREMENT,
 `user_id` INT(11) unsigned NOT NULL COMMENT 'FOREIGN KEY referencing the user_id of the user, who uploaded the images',
 `image_name` VARCHAR(64) NOT NULL,
 `image_path` VARCHAR(64) NOT NULL,
 `image_upload_timestamp` TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP,
 PRIMARY KEY (`image_id`);

使用原始名称(工作)将图像写入数据库的脚本

$database = DatabaseFactory::getFactory()->getConnection();

$sql = "INSERT INTO images VALUES ('', :user_id, :image_name, :image_path, :image_upload_timestamp)";
$query = $database->prepare($sql);

$query->execute(array(':user_id' => Session::get('user_id'), 
                      ':image_name' => $file_name, 
                      ':image_path' => $file_destination, 
                      ':image_upload_timestamp' => time()));

ImageModel::renameImage($image_id);

renameImage方法(不工作!)

public static function renameImage($image_id)
    {   
        $database = DatabaseFactory::getFactory()->getConnection();

        $query = $database->prepare("SELECT * FROM images WHERE image_id = :image_id AND user_id = :user_id");
        $query->execute(array(':image_id' => $image_id, ':user_id' => Session::get('user_id')));

        $img_id = $query->fetch();

        // Convert array to string
        $file_name = $img_id->image_id;

        $image_name = $file_name . '.jpg';


        $sql = "UPDATE images SET image_name = :image_name WHERE :image_id = $image_id";
        $sth = $database->prepare($sql);

        $sth->execute(array(':image_name' => $image_name));
    }



我对此非常陌生,非常感谢任何帮助!非常感谢你!

2 个答案:

答案 0 :(得分:2)

你也不需要在这个功能中休息。此功能仅更改了DB中的图像名称,而不是上传的图像名称。

public static function renameImage($image_id)
    {   
        $database = DatabaseFactory::getFactory()->getConnection();
        $file_name = $img_id->image_id;
        $image_name = $image_id. '.jpg';
        $sql = "UPDATE images SET image_name = :image_name WHERE image_id = :image_id";
        $sth = $database->prepare($sql);

        $sth->execute(array(':image_name' => $image_name,
                                ':image_id' =>  $img_id ));
    }

答案 1 :(得分:1)

好的,您显示的代码中没有任何与文件相关的内容,假设您在其他地方进行文件上传,则只需使用http://php.net/manual/en/function.rename.php

rename($img_id->image_path.$img_id->image_path, $img_id->image_path.$image_name);

$sql = "UPDATE images SET image_name = :image_name WHERE image_id = :image_id";
$sth = $database->prepare($sql);

$sth->execute(array(':image_name' => $image_name,
                    ':image_id' =>  $img_id ));