【问题标题】:Get image paths from MySQL DB从 MySQL DB 获取图像路径
【发布时间】:2015-09-09 16:15:07
【问题描述】:

我有一个 mysql 数据库,它在不同的列下包含多个图像(路径),即 id、image1、image2、image3 等。

我正在使用下面的代码根据 URL 中的 id 检索图像并将它们显示在 php 页面上的滑块中。

$query = "SELECT * FROM `images` WHERE ` id`='" . $id . "'";  
$result = mysql_query($query); 
while($fetch = mysql_fetch_assoc($result)){
$image1 = $fetch['image1'];
$image2 = $fetch['image2'];
$image3 = $fetch['image3'];
$image4 = $fetch['image4'];
$image5 = $fetch['image5'];
$image6 = $fetch['image6'];
$image7 = $fetch['image7'];
$image8 = $fetch['image8'];
$image9 = $fetch['image9'];
$image10 = $fetch['image10'];
}

并显示图像:

echo '<a data-Img='.$image1.' href='.$image1.'>';echo '<img class="Tmb" alt="" src='.$image1.'></a>';
echo '<a data-Img='.$image2.' href='.$image2.'>';echo '<img class="Tmb" alt="" src='.$image2.'></a>';
echo '<a data-Img='.$image3.' href='.$image3.'>';echo '<img class="Tmb" alt="" src='.$image3.'></a>';
echo '<a data-Img='.$image4.' href='.$image4.'>';echo '<img class="Tmb" alt="" src='.$image4.'></a>';
echo '<a data-Img='.$image5.' href='.$image5.'>';echo '<img class="Tmb" alt="" src='.$image5.'></a>';
echo '<a data-Img='.$image6.' href='.$image6.'>';echo '<img class="Tmb" alt="" src='.$image6.'></a>';
echo '<a data-Img='.$image7.' href='.$image7.'>';echo '<img class="Tmb" alt="" src='.$image7.'></a>';
echo '<a data-Img='.$image8.' href='.$image8.'>';echo '<img class="Tmb" alt="" src='.$image8.'></a>';
echo '<a data-Img='.$image9.' href='.$image9.'>';echo '<img class="Tmb" alt="" src='.$image9.'></a>';
echo '<a data-Img='.$image10.' href='.$image10.'>';echo '<img class="Tmb" alt="" src='.$image10.'></a>';

这可以正常工作,但并非数据库中的所有项目都有 10 张图像,所以对于只有 5 张图像的项目,是否显示空白图像占位符?是否可以防止这种情况发生,或者是否需要其他存储图像的方法?

【问题讨论】:

  • 预期的结果是什么?丢失的图像根本没有输出?您需要将它们保存在某种网格中吗?
  • 丢失的图片应该没有输出
  • 显示您的表格图像值。

标签: php mysql


【解决方案1】:

根据您的数据库设计,您可以将图像的名称存储在一个数组中,而不是十个不同的变量中。因此,如果表格行中只有五个图像,则数组将仅填充五个图像名称。并且在显示时您可以使用“foreach”循环来提取图像名称。

示例代码: 用于将图像存储在数组中

$query = "SELECT * FROM `images` WHERE ` id`='" . $id . "'";  
$result = mysql_query($query); 
while($fetch = mysql_fetch_array($result)){
$image[1] = $fetch['image1'];
$image[2] = $fetch['image2'];
$image[3] = $fetch['image3'];
$image[4] = $fetch['image4'];
$image[5] = $fetch['image5'];
$image[6] = $fetch['image6'];
$image[7] = $fetch['image7'];
$image[8] = $fetch['image8'];
$image[9] = $fetch['image9'];
$image[10] = $fetch['image10'];
}

显示图片

foreach($image as $pic) {
echo '<a data-Img='.$pic.' href='.$pic.'>';echo '<img class="Tmb" alt="" src='.$pic.'></a>';
}

希望这会有所帮助...

【讨论】:

  • 谢谢,如果我将我的数据库设计更改为只有两列 ID 和路径,我仍然可以使用此代码来检索、存储和显示图像吗? DB中的图片路径按照行ID命名,即200-1.jpg、200-2.jpg、200-3.jpg
  • 是的,您可以使用数组格式。在这种情况下尝试这样的代码.. while($fetch = mysql_fetch_array($result)){ $image_array[] = $fetch['image']; }
  • 谢谢,但这不显示任何图像?数据库中的“图像”列下有 5 个图像。所有都分配给 ID 200,这是页面 URL 中的 ID。我在您的原始答案中使用了第二段代码以及 $image_array[] = $fetch['image'];上面的查询,但没有显示?
  • 我们只使用了图像的名称。没有图像的路径。这意味着图像必须与您编写代码以显示图像的 PHP 文件位于同一目录中。如果您使用以前的数据库设计,那么这些代码应该可以正常工作。谢谢你..
【解决方案2】:

您的数据库结构部分错误。如果您有多个与相同 id 相关的图像,则应将它们存储在不同的表中,例如

images_table

img_id | img_path
100    | path1
100    | path2
101    | path3
102    | path3

因此,您将有机会为您的同一个 ID 添加第 11 或第 20 个图像。如果您有 100 张相同 id 的图片,您会为它们创建 +90 列吗?

【讨论】:

    【解决方案3】:

    正如有人告诉您的那样,每当您的记录有可变数量的列时,最好将表一分为二,并通过一个字段(外键)将它们关联起来。

    +--------+      +---------+
    | Table1 |      |  Table2 |
    +--------+      +---------+
    |   row  |<-----|  idRow  |
    +--------+      +---------+
                    |  image  |
                    +---------+
    
    SELECT t1.row, t2.image FROM table1 t1
                            JOIN table2 t2 ON t1.row = t2.idRow
    

    这个 SQL 查询应该返回类似

    +-------+----------+
    | row1  |  image1  |
    +-------+----------+
    | row1  |  image2  |
    +-------+----------+
    | row1  |  image3  |
    +-------+----------+
    | row1  |  image4  |
    +-------+----------+
    | row1  |  image5  |
    +-------+----------+
    | row2  |  image1  |
    +-------+----------+
    | row2  |  image2  |
    +-------+----------+
    | row2  |  image3  |
    +-------+----------+
    | row3  |  image1  |
    +-------+----------+
    

    【讨论】:

      【解决方案4】:

      您的系统以单独的列为每个图像显示图像是无效的。

      完全没有效果。

          ----- ----- ----------
         | ID | Name | Path     |
          ----- ----- ----------
         | 1  | Home |  1.jpg   |
         | 2  | Logo |  2.jpg   |
         | 3  | .... |  3.jpg   |
          ---- ------ ----------
      

      它更快、更高效、更有用。

      我不明白你的问题,你有具体的解释吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-10
        • 1970-01-01
        • 2021-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多