PHP-使用预准备语句在mysql中插入二进制数据
我必须使用PHP的mysql改进库将一行插入到mysql中具有类型为VARBINARY的主键的表中. 如果我以旧的方式运行查询它完美地工作:
但是当我尝试将其作为准备好的声明执行时,我无法弄清楚如何做到这一点.如果
它会抛出一个异常,说明这个字段的内容太大了.如果我尝试将其作为BLOB字段插入:
它没有给出错误,插入了行,但标识符字段现在为空(不为空,为空). 我知道我可以混合查询并输入字符串中连接的id和其他字段作为预准备语句的绑定参数,但我只是想知道插入这个的正确方法是什么,也许它会帮助某些人未来. 解决方法: PHP的sha1函数返回十六进制数字的字符串表示形式. 这意味着如果你将它打印到屏幕上,它将显示一个十六进制数字.但在内存中,它是一堆ASCII字符. 所以,取十六进制数1A2F.作为内存中的ASCII,将是0x31413246,而不是0x1A2F MysqL的普通接口将所有参数作为字符串发送.使用普通接口时,MysqL会将ASCII字符串转换为二进制值. 新的预处理语句方法将所有内容都以二进制形因此,“1A2F”的漂亮值现在将作为0x31413246发送并插入到列中. – source: dev.mysql.com – Prepared statements 相反,通过使用以下方法将Hex字符串打包成二进制字符串来转换它:
然后将$binId传递给MysqLi预处理语句而不是$id. (编辑:北几岛) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |