【问题标题】:PHP - Convert Image URL to SQL BLOBPHP - 将图像 URL 转换为 SQL BLOB
【发布时间】:2020-07-20 06:07:24
【问题描述】:

我正在使用 PHP 进行编程,并将 XAMPP 用于 ApacheMySQL

我已经搜索并尝试了两天将图像 URL 转换为二进制变量的方法。在此过程之后,我尝试将其作为 BLOB 插入 SQL 数据库表中。

我尝试了几种方法(不包括在下面),例如 base64()file_get_contents()保存图像文件甚至cURL...

这是SQL数据库表结构的图片:

这是“令人兴奋的迷幻”PHP代码:

<?php 
    // APPROACH #1
    $blob = file_get_contents('http://www.domainname.com/random/page/IMAGE.png');

    // APPROACH #2
    $bin = base64_encode($blob);

    // INSERT INTO QUERY
    $stmt = $db->prepare("INSERT INTO imagezzz (id_link, imagez) VALUES (?,?)");

    // APPROACH #1
    $stmt->bind_param("ib", $number, $blob);

    // APPROACH #2
    $stmt->bind_param("ib", $number, $bin);

    $stmt->execute();
?>

当查询被执行时,它会抛出no error。事实上,执行了 INSERT 查询并添加了一个新表行。第一个和第二个字段(id[int] 和 id_link[int])有数据,但第三个字段(imagez [BLOB])是空的。

我在 phpMyAdmin 中执行了一个 SQL INSERT QUERY(通过上传本地图像),它工作正常...

【问题讨论】:

  • 不要这样随意使用addslashes。这是一个几乎没用的函数,几乎总是不适合手头的工作,尤其是 SQL。

标签: php mysql binary blob


【解决方案1】:

如果您可以使用file_get_contents 获取文件,则应该可以:

$blob = file_get_contents('http://www.domainname.com/random/page/IMAGE.png');
print "Image is " . strlen($blob) . " bytes long\n";
$bin  = base64_encode($blob);
$estimate = round(strlen($blob)/0.75);
print "Blob is " . strlen($bin) . " bytes long (expecting about {$estimate}\n";
$stmt = $db->prepare("INSERT INTO imagezzz (id_link, imagez) VALUES (?,?)");
$stmt->execute([ $number, $bin ]);

【讨论】:

  • 非常感谢您的帮助和时间!我真心的!不幸的是,blob 插入仍然不起作用。它创建一个包含数据的行,除了 blob(imagez) 字段。也许问题出在 XAMPP、PHPMyAdmin 或 MySQL 上……我会寻找一些线索……无论如何,谢谢! ?
猜你喜欢
  • 2019-11-18
  • 2011-08-31
  • 2020-06-16
  • 1970-01-01
  • 2016-05-29
  • 1970-01-01
  • 2015-08-04
  • 2012-11-04
  • 1970-01-01
相关资源
最近更新 更多