Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将BLOB图像转换为二进制值_Php_Sql_Binary_Phpmyadmin - Fatal编程技术网

Php 将BLOB图像转换为二进制值

Php 将BLOB图像转换为二进制值,php,sql,binary,phpmyadmin,Php,Sql,Binary,Phpmyadmin,我在phpadmin中将数据库中的一个图像上传到blob类型的列图像中。因此我想选择图像的二进制代码,所以我这样做了 SELECT CONVERT( `image` USING binary ) AS image FROM `license` WHERE `l_name` = 'lamen' LIMIT 0 , 30 结果与我想要的相似,但我不认为我得到了纯二进制,因为它返回了这个 �PNG\r\n\Z\n\0\0\0\rIHDR\0\0\0h\0\0\0f\b\0\0\0\0�tC�\0

我在phpadmin中将数据库中的一个图像上传到blob类型的列图像中。因此我想选择图像的二进制代码,所以我这样做了

SELECT CONVERT( `image` 
USING binary ) AS image
FROM `license` 
WHERE `l_name` = 'lamen'
LIMIT 0 , 30
结果与我想要的相似,但我不认为我得到了纯二进制,因为它返回了这个

�PNG\r\n\Z\n\0\0\0\rIHDR\0\0\0h\0\0\0f\b\0\0\0\0�tC�\0\0\0sRGB\0���\0\0\0gAMA\0\0�� UT+M�TQ�K�+�K�\R�\0\0\0\0IEND�B`�

只是一堆乱七八糟的东西。我删除了很多行,因为它只是这个类似的代码

不过。如果我说 选择CONVERTimage 使用二进制作为许可证中的图像,其中l_name='lamen'

它返回图像及其下的[BLOB-413字节]

如果我点击它,我会得到

选择* 从许可证 图像在哪里 使用utf8=强制转换0x89504E470D0A1A0000000D4948452000000068000066080200000A8744386000000017352474200AECE900000467414D410000B18F0BFC6105000000097048597300000EC300000EC301C76FA864000001324944154785EEDD10EC2401443C15C823B736CE8E956CF2B2184B1796E7273CEFE7E577E577E5777D007D0737C08EE109CE21477F75859CC55555CFC5959CFC5958CFC5959CFC5958CFC5958CFC5958CFC5958CFC5958CFC5958CFC5958CFC5958CF958CFC5958CFC5958CF958CFC59CFC58CFC58CFC58CFC58CFC58CF5E21477F79E589CC5599CEFB843058A53DCDDF36171166771FE725577C007F0E13D519CE2EE12E628BB3388BAB5E7CD31C545145754AAC0A471555542B4DD31C54545754AAC0A471555542B4AAC0A471555542B4DD31C5454545754AAC0A47555545454545B4AAC0A454545454545B4AAC0A454545454545B4AAC045454545454545B4AAC545454545B4545454545B45B4545B45B45B45C54545B45B45B4545B45B45B45B45B45B45B45B45B45B45B45B45B4545B45B45B45B45B45B45B45B45B4545B4545450A471555542B4DD31C545145754AAC0A471555542B4DD31C545145754AAC0A471555542B4DD31C5451BD4BF5032B956B28B9120D8B00000000049454E44AE426082作为二进制;

我怀疑这就是我想要的…但是…我无法让我的select语句返回代码,即使我说 使用utf8选择CONVERTimage

谢谢你的帮助

另外,我知道将图像上传到文件并保存路径更容易。而且已经知道怎么做了。然而,我正在尝试一些东西,想用这种方式。
再次感谢

假设您将图像作为字符串,您根本不需要实际转换它,也不需要担心字符集。看来你把事情复杂化了

使用其中一种BLOB类型作为字段类型BLOB/MEDIUMBLOB等,并确保在插入数据库时转义字符串。这些字段类型不依赖于字符集,而是二进制类型

如果您使用的是旧的mysql函数,请使用mysql_real_escape_string来转义该值,但是如果您使用的是PDO或mysqli,那么用户准备好的语句,因为这样做可以轻松地为您转义


当您选择时,也无需执行任何操作-它应该可以正常工作。

图像字段是BLOB,我使用phpmyadmin的GUI手动上载了它。当我说从表中选择图像时,我得到空值,我的程序1检查大小。BLOB限制为64K 65535字节,因此您可能需要更大的字节。2当您浏览时,PHPMyAdmin显示什么?phpMyAdmin会转换为二进制,您应该能够看到数据,因为十六进制的二进制字符串以0x开头。当我浏览图像时,字段显示[BLOB-413字节]。它没有显示以0x开头的二进制文件,因为这正是我所期望的。我只是在做我在第一篇文章中所说的事情时才看到“0x”。感谢您迄今为止的帮助在本例中,它不是空的-之后是您的代码出错-只需直接进行选择,不进行任何类型的转换。从数据库中选择图像。然后,假设插入到一个BLOB中,您应该持有与插入的字符串相同的字符串。如果在where中需要它,那么只需转义,而不转换为二进制-您不必复制phpMyAdmin!我有一个直接的选择,但它不工作,这就是为什么我决定格式化它。这是原始代码$stmt=$this->db->prepare'SELECT id,CONVERTimage使用二进制,license\u num,l\u name,f\u name,DATE\u FORMATbirth\u d,\'%e-%m-%Y\'作为出生日期,DATE\u FORMATexpires,\'%e-%m-%Y\'作为到期日期,license\u类型,license\u状态,CASE WHEN CURDATE>=Expired然后“Expired\”否则“Not Expired\”作为状态从l\u name=?'的许可证结束$stmt->bind_params,$l_name;希望不是一团糟