上传磁盘上的图像,并使用php将图像名称保存在mysql DB上

时间:2012-11-29 18:50:31

标签: php mysql image upload

我有一个MySQL数据库,有2张桌子,相册和照片:

相册有id和名称,照片有id,album_id,photo_name。

我有以下脚本:

<?php

$albumsQuery = $mysqli->query( "SELECT `album_id`, `album_name` FROM `albums` ORDER BY `album_name` ASC" );

if( isset( $_FILES["albumPhoto"] )  )
{
    move_uploaded_file( $_FILES["albumPhoto"]["tmp_name"], "photos/" .$_FILES["albumPhoto"]["name"] );
}

if( isset( $_POST["album_name"] ) )
{
    $uploadQuery = $mysqli->query( "INSERT INTO `photos` ( `photo_id`, `photos`.`photo_id_album`, `photos`.`photo_name` )
    VALUES ( NULL,'" . $mysqli->real_escape_string( $_POST["album_name"] ) . "','" . $mysqli->real_escape_string( $_FILES["albumPhoto"]["name"] ) . "' )" )
    or die( $mysqli->error );

    $upload = $uploadQuery->fetch_array( MYSQLI_ASSOC );
}
?>

图像上传到磁盘上,但我无法在DB上获取图像名称。

先谢谢。

1 个答案:

答案 0 :(得分:0)

我在回答你自己的问题时写了一些代码,所以我还是会发布它:

$albumsQuery = $mysqli->query('SELECT album_id, album_name FROM albums ORDER BY album_name');

// assume image not uploaded
$imagePath = null;

// if a photo is being uploaded
if (isset($_FILES["albumPhoto"])) {
    $source = $_FILES["albumPhoto"]["tmp_name"];
    $target = sprintf('photos/', $_FILES["albumPhoto"]["name"]);

    // try to move the file
    $move = move_uploaded_file($source, $target);
    if ($move !== true) {
        throw new Exception('Could not move the uploaded file: ' . $_FILES["albumPhoto"]["name"]);
    }
}

// attach the image to the specified album
if (isset($_POST["album_name"])) {
    $stmt = 'INSERT INTO photos (photo_id_album, photo_name)
             VALUES (?, ?)';
    $stmt->bind_param('ss', $albumName, $photoName);

    // values of bound variables
    $albumName = $_POST["album_name"];
    $photoName = $_FILES["albumPhoto"]["name"];

    // insert the record
    $stmt->execute();
    $stmt->close();
}

此外,使用原始文件名并不是一个好主意,因为用户可能希望在同一时间内将多个具有相同名称的文件上传到同一个相册中。请考虑使用哈希或将相册ID添加到文件名中。

并添加一些错误检查!