将多个图像路径插入多列

问题描述 投票:-1回答:1

在Intranet站点上,我将许多图像从文件系统移到MySQL,并编写了一些辅助功能。没有错误,但没有图像被插入。

而且,具有相同名称的图像位于子文件夹中,该子文件夹的名称正在传递给该函数,但是我不确定如何合并它,以便较小的图像写入同一行。目前没有任何编程方法,因为我不知道从哪里开始!

关于这两件事有什么想法吗?当然,第二个是有争议的,直到第一个开始工作。

function uploadFolder($path,$thumbpath) {
    // Use form to submit path (keeps process from running automatically when loaded)
    if (isset($_POST['create']) && isset($path)) :
        global $siteDB;

        // Fetch image names from existing albums
        $sqlAlbum = "SELECT ID, ImageName FROM albums ORDER BY ImageName";
        $sqlRow = DBConnect($sqlAlbum, "Multiple", $siteDB, "assoc");

        // Build queries to insert all images to table
        foreach ($sqlRow as $row) :
            $filename = basename($row['ImageName']);
            $albumID = $row['ID'];
            $pathname = $path.$filename; 
            $sqlUpload = "INSERT INTO images (`ImageName`,`AlbumID`,`ImageFull`) VALUES ('$filename', $albumID, LOAD_FILE('$pathname'))";
            // Run the query for each file
            DBConnect($sqlUpload,"Run", $siteDB);
        endforeach;

        // FOR TEST PURPOSES ONLY
        $_SESSION['testSQL'] = $sqlUpload;
    endif;
}

被调用:

if (isset($_POST)) :
    $path = (isset($_POST['path'])) ? $_POST['path'] : "";
    uploadFolder($path,"thumbnails");
endif;

对于图像表不是很多,但是这里是:

CREATE TABLE IF NOT EXISTS `images` (
  `ID` int unsigned NOT NULL AUTO_INCREMENT,
  `ImageName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `AlbumID` int unsigned DEFAULT NULL,
  `ImageFull` blob,
  `ImageThumb` blob,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=228 DEFAULT CHARSET=utf8;
php mysql mysqli blob
1个回答
0
投票

很难确定,因为您使用的是带有某些奇怪参数约定的数据库包装程序。通常,您不会使用LOAD_FILE,而是使用php将文件读取到变量中,并使用mysql客户端api保存每一行。

LOAD_FILE可以工作,但是它必须是文件的确切路径,并且有效的Web服务器用户(运行Web服务器的用户)必须具有您尝试读取的目录的权限。

假定是正确的,类似这样的方法应该起作用:

    foreach ($sqlRow as $row) :
        $filename = basename($row['ImageName']);
        $albumID = $row['ID'];
        $pathname = $path.$filename;
        $thumbPathname = $thumbpath.$filename
        $sqlUpload = "INSERT INTO images (`ImageName`,`AlbumID`,`ImageFull`,`ImageThumb`) VALUES ('$filename', $albumID, LOAD_FILE('$pathname'), LOAD_FILE('$thumbPathname'));\n";
        // Run the query for each file
        DBConnect($sqlUpload,"Run", $siteDB);
    endforeach;

调用此例程的窗体需要更改,以便它既有普通图像又有缩略图的输入。目标脚本也需要相应地更改。

if (isset($_POST)) :
    $path = (isset($_POST['path'])) ? $_POST['path'] : "";
    $thumbpath = (isset($_POST['thumbpath'])) ? $_POST['thumbpath'] : "";
    uploadFolder($path,$thumbpath);
endif;

潜在问题:

  1. SQL语句具有分号和换行符。我从未见过包含这些客户端的数据库客户端调用。 MySQL客户端库不使用这些库,因此我不确定为什么它们会成为数据库包装器的一部分。
  2. 这里没有错误检查代码。如果DBConnect()功能出了问题,您怎么知道?
  3. 路径变量必须完整,并且必须具有结束符。

确定

/somepath/to/directory/

将不工作

/somepath/to/directory
© www.soinside.com 2019 - 2024. All rights reserved.