You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL数据库图片存储与HTML调用方案及报错解决请求

解决图片存入SQL数据库并在HTML中调用的问题

首先,你的报错根源很明确:mysql_connect()这类旧的mysql扩展函数在PHP 7及以上版本已经被完全移除了,所以必须改用mysqli(面向过程或面向对象)或者PDO来操作数据库。下面是一套完整的、基于mysqli的可行方案:

一、HTML上传表单(优化版)

<!DOCTYPE html>
<html lang="it">
<head>
    <meta charset="UTF-8">
    <title>Carica immagine nel DB</title>
</head>
<body>
    <form name="upload" action="write_db.php" method="POST" enctype="multipart/form-data">
        <input type="file" name="file_inviato" accept="image/*" required>
        <button type="submit" name="invia">Invia immagine</button>
    </form>
</body>
</html>

这里做了几个实用优化:

  • 采用HTML5标准文档结构与编码设置
  • 添加accept="image/*"限制仅能上传图片文件
  • 用required确保用户选择文件后才能提交
  • 替换重复的提交按钮为语义化的<button>标签

二、PHP写入数据库代码(write_db.php)

<?php
// 检查文件上传状态
if (!isset($_FILES["file_inviato"]) || $_FILES["file_inviato"]["error"] !== UPLOAD_ERR_OK) {
    die("Errore nell'invio del file. Riprova!");
}

// 替换为你的真实数据库凭据
$host = "localhost";
$user = "MYUSER";
$password = "TUAPASSWORD";
$dbname = "MY_DB";

// 建立mysqli数据库连接
$conn = mysqli_connect($host, $user, $password, $dbname);
if (!$conn) {
    die("Connessione non riuscita: " . mysqli_connect_error());
}

// 获取上传文件的基础信息
$temp_file = $_FILES["file_inviato"]["tmp_name"];
$real_name = $_FILES["file_inviato"]["name"];
$file_type = $_FILES["file_inviato"]["type"];

// 读取文件二进制内容
$file_data = file_get_contents($temp_file);

// 安全转义内容,避免SQL注入风险
$escaped_name = mysqli_real_escape_string($conn, $real_name);
$escaped_type = mysqli_real_escape_string($conn, $file_type);
$escaped_data = mysqli_real_escape_string($conn, $file_data);

// 执行插入数据库操作
$query = "INSERT INTO tabella_file (nome, tipo, dati) VALUES ('$escaped_name', '$escaped_type', '$escaped_data')";
if (mysqli_query($conn, $query)) {
    echo "Memorizzazione dell'immagine <b>$real_name</b> nel database eseguita correttamente!<br>";
    echo '<a href="show_image.php">Visualizza l\'immagine caricata</a>';
} else {
    die("Query non valida: " . mysqli_error($conn));
}

// 关闭数据库连接
mysqli_close($conn);
?>

关键注意事项:

  • 务必替换$user、$password、$dbname为你的真实数据库信息
  • 使用mysqli_real_escape_string替代旧的addslashes,更安全地防范SQL注入
  • 连接数据库时直接指定目标库,无需单独调用选择数据库的方法

三、PHP读取图片并在HTML中显示(show_image.php)

要在HTML中调用存储在数据库的图片,需要一个单独的PHP文件输出图片内容,再通过HTML的<img>标签引用:

<?php
// 数据库连接信息(与上方保持一致)
$host = "localhost";
$user = "MYUSER";
$password = "TUAPASSWORD";
$dbname = "MY_DB";

$conn = mysqli_connect($host, $user, $password, $dbname);
if (!$conn) {
    die("Connessione non riuscita: " . mysqli_connect_error());
}

// 示例:读取ID为1的图片,可根据需求修改查询条件
$id = 1;
$query = "SELECT tipo, dati FROM tabella_file WHERE id = $id";
$result = mysqli_query($conn, $query);

if ($row = mysqli_fetch_assoc($result)) {
    // 设置响应头为图片对应的MIME类型
    header("Content-Type: " . $row['tipo']);
    // 输出图片二进制内容
    echo $row['dati'];
} else {
    echo "Immagine non trovata!";
}

mysqli_close($conn);
?>

在HTML中调用示例:

<!DOCTYPE html>
<html lang="it">
<head>
    <meta charset="UTF-8">
    <title>Visualizza Immagine</title>
</head>
<body>
    <h2>Immagine dal Database</h2>
    <img src="show_image.php" alt="Immagine caricata nel DB">
</body>
</html>

四、数据库表结构参考

确保你的tabella_file表有正确的字段结构:

CREATE TABLE tabella_file (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nome VARCHAR(255) NOT NULL,
    tipo VARCHAR(100) NOT NULL,
    dati LONGBLOB NOT NULL
);
  • dati字段必须设置为LONGBLOB类型,用于存储大体积的图片二进制内容
  • id作为自增主键,方便后续精准查询指定图片

内容的提问来源于stack exchange,提问作者Automaction Program

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 19:52:36