有没有办法让我的图像通过 MySQL 或 phpMyAdmin 显示在我的 PHP 页面上?

Posted

技术标签:

【中文标题】有没有办法让我的图像通过 MySQL 或 phpMyAdmin 显示在我的 PHP 页面上?【英文标题】:Is there a way to get my images to show up on my PHP page through MySQL or phpMyAdmin? 【发布时间】:2020-11-22 08:28:50 【问题描述】:

我想知道是否可以运行我的 php 页面,因为我尝试从 phpMyAdmin 和 mysql 中的数据库加载图像文件。这是我正在处理的代码行:

CREATE DATABASE WORLD;

use WORLD;

CREATE TABLE COUNTRY (
    country_Order INT AUTO_INCREMENT NOT NULL,
    continent_Name VARCHAR(225),
    country_Name VARCHAR(225),
    img BLOB,
    country_Region VARCHAR(225),
    country_Population INT,
    country_Info VARCHAR(225),
    PRIMARY KEY (country_Order)
)  ENGINE=INNODB;

INSERT INTO COUNTRY (country_Order, continent_Name, country_Name, img, country_Region, country_Population, country_Info)
VALUES (1, "Asia", "Afghanistan", LOAD_FILE('\Users\sammyabdulkader\desktop\World-Data\img\Afghanistan.png'), "Central Asia", 38928346,"Afghanistan is a country located in Central Asia. It is a mountainous landlocked country.");

我想从我的文件夹路径手动插入我自己的图像。这是在我的 MacBook Pro 上完成的。这是我的 PHP 代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<html>
  <body>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>World Database</title>
        <style type="text/css">
        h1 
            color: #42963d;
            font-family: 'Open Sans', sans-serif;
            font-size: 34px;
            font-weight: 300;
            line-height: 40px;
            margin: 0 0 16px;
            text-align: center;
        

        h2 
            font-family: 'Open Sans', sans-serif;
            font-weight: 300;
            text-align: center;
            color: #50d248;
        

        p.footer text-align: center
        table.output font-family: Ariel, sans-serif

        table 
            border-collapse: collapse;
            width: 100%;
            color: #4ee44e;
            font-family: monospace;
            font-size: 25px;
            text-align: center;
        

         th 
            background-color: #0b7208;
            color: white;
        

        tr:nth-last-child(even) background-origin: #f2f2f2

         hr 
            height: 12px;
            border: 0;
            box-shadow: inset 0 12px 12px -12px rgba(0, 0, 0, 0.5);
        

        a 
            color: red;
            font-family: helvetica;
            text-decoration: none;
            text-transform: uppercase;
        

         a:hover 
            text-decoration: underline;
        

        a:active 
            color: black;
        

        a:visited 
            color: purple;
        
        </style>
    </head>
   <body>
<?php
// Get connection
//$Conn = odbc_connect('database name','database user','database user & password');
$Conn = odbc_connect('WORLD', 'WORLD-User', 'WORLD-User+password');

// Test connection
if (!$Conn)

    exit("ODBC Connection Failed: " . $Conn);

// Create SQL statement
$SQL = "SELECT * FROM COUNTRY";

$RecordSet = odbc_exec($Conn, $SQL);

// Test existence of recordset
if (!$RecordSet)

    exit("SQL Statement Error: " . $SQL);


?>
                        <!--  Page Headers -->
    <h1>List of countries from around the global.</h1>
        <hr />
    <h2>All Country's Alphabetical Order</h2>
<?php
// Table headers 
echo "<table class='output' border='1'>
        <tr>
        <th>Country Order</th>
        <th>Continent Name</th>
        <th>country Name</th>
        <th>Country Flag</th>
        <th>Continent Region</th>
        <th>Country Population</th>
        <th>Country Info</th>
        </tr>";

// Table data
while ($RecordSetRow = odbc_fetch_array($RecordSet))

    echo "<tr>";
    echo "<td>" . $RecordSetRow['country_Order'] . "</td>";
    echo "<td>" . $RecordSetRow['continent_Name'] . "</td>";
    echo "<td>" . $RecordSetRow['country_Name'] . "</td>";
    echo "<td>" . $RecordSetRow['img'] . "</td>";
    echo "<td>" . $RecordSetRow['country_Region'] . "</td>";
    echo "<td>" . $RecordSetRow['country_Population'] . "</td>";
    echo "<td>" . $RecordSetRow['country_Info'] . "</td>";
    echo "</tr>";

echo "</table>";

// Close connection
odbc_close($Conn);
?>
        <br />
         <hr />
        <p class="footer"><a href="../World-Data/index.html">Return to World Data</a></p>
       <hr />
  </body>
</html>

我的问题是,当我使用手动方式时,我的 PHP 表得到了空值。 另一个问题是在 phpMyAdmin 上做这件事让它看起来更糟。相反,它会返回奇怪的字符。

是否有可能的方法来解决我的问题,以便让我的数据库表中的图像启动并运行? phpMyAdmin way inserting the images from the online database Manual way from MySQL insert

【问题讨论】:

您不能将二进制图像按原样插入 HTML 页面。您要么需要有常规的 img 标签,其中来源类似于“return-image.php?id=image-id”(并编写该 PHP 页面)或 Base64 - ***.com/questions/2807251/… 你需要将$RecordSetRow['img']保存成二进制文件,然后像&lt;img src="&lt;file&gt;"&gt;一样显示。我认为没有理由保存二进制数据并将它们放入文件中。最好保留文件并将对图像的引用存储到数据库中。 @MarkusZeller:一般来说是不好的建议,如果没有与市长的缺点一起提到:当文件系统中有文件并且数据库中只有它们的路径时,这只是 DBMS 的普通字符串,那么DBMS 不能保证完整性(至少在没有任何需要手动实施的更复杂的额外措施的情况下不能保证)。可能存在没有文件的路径或未在任何地方引用的文件。如果应用程序中的完整性是任何问题,那么将文件内容存储在数据库中是更好/更简单的方法。 Markus Zeller 告诉我它是如何完成的?我经常感到困惑。 phpMyAdmin 是用 PHP 编写的 MySQL 管理工具,它本身不是数据库。您可能正在使用 MySQL 或 MariaDB 作为数据库。 【参考方案1】:

这只是一个示例方法。

这个想法是为每个图像创建一个唯一的文件名。一个简单的快速方法是 MD5 哈希。然后我们检查文件是否存在,如果没有,我们创建它。这种缓存提高了重新加载时的性能,并且不需要再次创建图像。

使用IMG 标签,我们只显示(新创建的)文件。

注意:您可能需要使用 CSS 设置样式并将图像放入目录中以便更好地组织。

while ($RecordSetRow = odbc_fetch_array($RecordSet))

    $filename = md5($RecordSetRow['img']) . '.png';
    if(!file_exists($filename)) 
          file_put_contents($filename, $RecordSetRow['img']);
    

    echo "<tr>";
    echo "<td>" . $RecordSetRow['country_Order'] . "</td>";
    echo "<td>" . $RecordSetRow['continent_Name'] . "</td>";
    echo "<td>" . $RecordSetRow['country_Name'] . "</td>";

    // Use HTML image tag with that file
    echo "<td><img src='$filename' alt=''></td>";

    echo "<td>" . $RecordSetRow['country_Region'] . "</td>";
    echo "<td>" . $RecordSetRow['country_Population'] . "</td>";
    echo "<td>" . $RecordSetRow['country_Info'] . "</td>";
    echo "</tr>";

echo "</table>";

【讨论】:

sabdul.it.pointpark.edu/World-Data/world.php 它可以工作,但是图像显示一半。我怎样才能完成一次全部显示 将书面图像与原始图像进行比较。将 blob 大小与原始文件大小进行比较。还要确保使用right sized BLOB type 来适应所有图像数据。 试试 MEDIUMBLOB 甚至 LONGBLOB。 我都试了。两个图像甚至都无法正确显示

以上是关于有没有办法让我的图像通过 MySQL 或 phpMyAdmin 显示在我的 PHP 页面上?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法使用 Photon Pun2 或 Photon Chat 发送或接收图像、音频和视频?

有没有办法让我的组件在角度上完全可重用?

有没有办法将 segue 操作延迟到用户通过他们的照片库选择图像或拍照之后?迅速

有没有办法为图像指定最大高度或宽度?

有没有办法将我的 MySQL 密码安全地存储在 Node.JS 中?

有没有办法用 css 或 jquery 删除或隐藏图像的一部分