我在mysql数据库中有一个表,它使用uuidv1作为主键。uuid存储为16字节字符串,如中所述https://www.percona.com/blog/2014/12/19/store-uuid-optimized-way/ . 该列的mysql数据类型是binary(16)。所有uuid都是使用php库以相同的方式生成的。mysql版本是v5.0.12。
我从表中检索行,如下所示:
$where = sprintf("'%s'", $bytestring_uuid);
$wpdb->get_results(
"
SELECT *
FROM $my_table
WHERE id = $where
"
);
现在这通常是可行的,但奇怪的是,对于一些uuid,查询失败了,我不知道为什么。
以下是查询使用的一些uuid(以原始格式,因此您可以阅读它们):
c80615fc-e441-11e8-b328-002522a6b241
d4c94f0c-e441-11e8-9316-002522a6b241
df11cade-e441-11e8-b3a5-002522a6b241
这个失败了:
27c049c4-e67f-11e8-9e6f-002522a6b241
错误日志:
wordpress数据库错误您的sql语法有错误;检查与您的mariadb服务器版本相对应的手册,以获得在“?i”附近使用的正确语法äž在查询的第3行选择“从我的表中选择*,其中id=”èä一èü³(
知道发生了什么吗?
2条答案
按热度按时间toe950271#
解决sql注入问题还可以解决一些二进制格式的字符在php内插字符串中无法很好地扩展的问题。
使用pdo或mysqli解决方案可以解决这两个问题。
同样是mysql-5.0.12,目前还没有任何维护状态。你会遇到麻烦,唯一的解决办法就是升级。越快越好。
waxmsbnn2#
27是单引号,22是双引号。因此非常需要转义二进制字符串。是的,该链接告诉您如何仅使用16个字节来存储它。
或者。。。而不是说
抓住魔咒说
也就是说,你有
$byte_string
必须是32个十六进制数字。