Php 在mySQL数据库中存储图像的问题

Php 在mySQL数据库中存储图像的问题,php,mysql,sql,image,blob,Php,Mysql,Sql,Image,Blob,**已解决** 我的代码有点问题 我必须使用php和HTML表单将图像存储到mysql数据库中。 我跟随导游,但我并不真正工作。它将文件上载到服务器。。。然后它就被抛弃了。。。至少没有存储 对于代码。。。文本和变量的语言是。。。达奇:如果你对那部分有问题,我很乐意帮忙 目标表的数据库布局为: Fotos fotonr int(10) Index number album varchar(20)

**已解决**
我的代码有点问题

我必须使用php和HTML表单将图像存储到mysql数据库中。 我跟随导游,但我并不真正工作。它将文件上载到服务器。。。然后它就被抛弃了。。。至少没有存储

对于代码。。。文本和变量的语言是。。。达奇:如果你对那部分有问题,我很乐意帮忙

目标表的数据库布局为:

Fotos

fotonr        int(10)                       Index number
album         varchar(20)                   Grouping catagory(not needed)
Lid           int(4)                        Index number of the member that placed it
type          varchar(20)                   To store what kind of image it is
image         blob                          The image itself
为此,我使用以下段(数据库链接不在文件中,之前已经生成)



因为我现在不能测试这个,所以我不是100%确定,但是我非常确定$\u POST['file[]']和$\u FILES['file[]']不起作用$_POST['file']和$\u文件['file']应该是。我想你在某个地方有意见,比如

<input type="file" name="file[]" />

这将允许您上载多个文件,这些文件应存储在$_files['file']中,然后它本身将成为一个数组。[]表示它将是一个多值键,这意味着您需要在PHP站点中以数组的形式访问它

据我从你的帖子中了解,你正在学习这一点,因此请允许我建议你不要将图像存储在数据库中,除非你有充分的理由这样做。你不应该这么做有很多原因,我不想在这里说。你可以在tizag.com上找到一个不错的老学校教程


我希望这有帮助。祝您好运并享受:)

您似乎缺少连接到数据库的代码

$db = mysql_connect("localhost", "mysql_user", "mysql_password");
生成的数据库句柄应作为第二个参数传递给
mysql\u query

$result = mysql_query($query, $db); 
为便于故障排除,请将MySQL错误信息写入网页:

echo "<br>Error " . mysql_errno($db) . ": " . mysql_error($db) . "<br>";
echo“
错误”。mysql\u errno($db)。": " . mysql_错误($db)。“
”;

这是我之前写的一个答案。

请记住,BLOB数据类型的最大长度是64KB。图像变大是很常见的,所以也许您应该使用MEDIUMBLOB

有关更多详细信息,请参阅。

这是您的问题:

  $fp      = fopen($tmpName, 'r');
  $content = fread($fp, filesize($tmpName));
  $content = addslashes($content);
您将文件内容解释为文本,而不是二进制数据

您必须以二进制格式将数据呈现给mysql服务器。不要在上面加斜杠。(是否足够冗余?)

(编辑)请尝试以下代码:

  $content = file_get_contents($tmpName);
  $data = unpack("H*hex", $content );
  $content = '0x'.data['hex'];

为什么不将参考信息存储在数据库中,并将文件存储在服务器上的文件夹中呢

比如说

fotonr        int(10)                       Index number
album         varchar(20)                   Grouping catagory(not needed)
Lid           int(4)                        Index number of the member that placed it
type          varchar(20)                   To store what kind of image it is
image         varchar(64)                   Path to The image itself

这样,如果您需要删除图像,您知道图像的路径,并且可以简单地取消链接,在数据库中访问图像和查询时,如果没有blob,速度会更快。

通常最好将图像文件存储在文件系统中,而不是数据库中。@Dagon:通常,但不总是。@Bill很棒的评论,这不适用于什么?@Dagon:例如,如果您需要图像遵守事务隔离或回滚,或者在删除相应行时以原子方式离开,或者包含在数据库备份中,则最好将图像存储在数据库中。addslashes来自我读过的教程,mysql\u real\u escape\u string($content)更好吗?是的,addslashes没有那么好。您可以在这里阅读PHP安全专家Chris Shiflett的解释:连接材料在另一节中处理。它还使用$db_selected=mysql_select_db(…)来选择正确的数据库。但我确实应该打印错误消息
fotonr        int(10)                       Index number
album         varchar(20)                   Grouping catagory(not needed)
Lid           int(4)                        Index number of the member that placed it
type          varchar(20)                   To store what kind of image it is
image         varchar(64)                   Path to The image itself