【问题标题】:Problems loading bulk data in mysql using php使用php在mysql中加载批量数据的问题
【发布时间】:2010-12-05 21:03:24
【问题描述】:

我有一个通过 url 请求获取原始二进制图像数据的脚本。然后它获取数据并将其放入 mysql 中。

很简单吧?好吧,我正在插入大约 8,000 个大小合适的 600x400 jpeg,出于某种奇怪的原因,一些图像被截断了。也许我的脚本中迭代它需要获取的每个图像的部分会很快?

当我直接请求 URL 时,我可以看到所有原始图像数据,但在我的最后,数据被截断了。

任何想法为什么?

【问题讨论】:

  • 您使用什么 blob 类型来存储图像?
  • 只是带有二进制属性的 blob

标签: php mysql image binary


【解决方案1】:

链中的某些东西是否将二进制数据视为字符串,特别是 C 风格的以空字符结尾的字符串?这可能会导致它在第一个空字节 ('\0') 处被切断。

【讨论】:

  • 我的意思是,如果不使用字符串,我还能用什么其他方式做到这一点?
【解决方案2】:

您是否尝试过简单地调用您的脚本来提取二进制图像,然后将其转储出去。如果您正确地看到图像,那么它不是拉动的部分,可能与插入有关。

【讨论】:

  • $this->query("插入图像(db,pid,raw) values('".$s."','".$valid_pid."','".mysql_real_escape_string( $new_image)."')");我就是这样插入的
  • 在我的“mysql_real_escape_string()”之外、内部或外部,还是什么?如果有的话会有什么不同?
【解决方案3】:

您是否正确设置了标题?

即:

header('Content-Length: '.strlen($imagedata));
header('Content-Type: image/png');
...

【讨论】:

  • 内容长度有必要吗?
【解决方案4】:

字符串数据类型肯定不是最适合在数据库中存储图像。

事实上,我已经看到了一些建议,即图像应该放在文件系统中某处的文件夹中,并且 DB 只包含地址/文件路径。

This 是指向有关插入图像的页面的链接。

它包含有关文件路径的建议,如果图像必须进入数据库,blob 数据类型会更好。

如果它是一个 blob,那么将其视为一个字符串是行不通的。

【讨论】:

  • 好吧,我不确定你所说的字符串是什么意思。如果您指的是 PHP 字符串或 MySQL 字符串,如果是后者,我从未听说过。图像必须进入数据库,我使用的是 blob,它设置为二进制。可能是我的脚本正在快速迭代循环,即对数据执行 http 请求并将其插入数据库的部分?
  • 好的,所以 MySQL 'string' 数据类型将被称为 VARCHAR 或 CHAR,但这意味着一系列字符。在大多数编程语言和其他答案中,这将被称为字符串。正如 John Kugelman 所说,将二进制数据视为字符串可能会导致问题。自从他回答以来,您已经评论说您正在使用 blob。那很好,但我当时认为约翰的建议很好,我赞成。现在看来答案在别处。我不会责怪你的循环,因为我没有看到它。
【解决方案5】:

如果你对同一个 url 重复请求,图片最终会加载吗?

如果是这样,则表明存在网络问题。在您的内核(假设是 linux)中启用了大数据包支持,这对于许多 Windows 客户端都无法正常工作。我在 linux 机器上看到过大型 (1+MB) javascript 库的类似问题。

http://en.wikipedia.org/wiki/TCP_window_scale_option

http://support.microsoft.com/kb/314053

【讨论】:

  • 无论你看多少次,它都会加载相同的内容,或者 ctrl+f5 搞砸了,哈哈。相信我,我很懒,我已经试过了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-18
  • 1970-01-01
  • 2019-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多