我正在尝试使用PDO:执行此查询
select * from users where uuid = 0x1e8ef774581c102cbcfef1ab81872213;
我将此SQL查询传递给PDO:的准备方法
select * from users where uuid = :uuid
然后我传递这个hashmap来执行:
Array ( [:uuid] => 0x1e8ef774581c102cbcfef1ab81872213 )
当我调用fetchAll:时,看起来这个查询是在mysql服务器上执行的
select * from users where uuid = '0x1e8ef774581c102cbcfef1ab81872213';
如何在不让PDO在我的十六进制周围添加引号的情况下执行查询?
谢谢,Steve
您的值必须以字符串的形式插入,因为它远远超出了(128位)在PHP中64位和32位版本中可以表示为正常数字的范围。
例如,跳过占位符并将其直接嵌入到查询字符串中:
$uuid = '0x....';
$sql = "SELECT ... WHERE uuid = $uuid";
这意味着您将失去占位符的好处,并且将不得不直接处理SQL注入缓解。
你没有提到你正在使用哪一个DBMS,但你可以通过利用你的DBMS的转换函数来绕过它,例如
SELECT... WHERE uuid = CAST(:uuid AS uuid_type)
这样,即使它以字符串的形式进入数据库,在紧要关头,它也会被视为本地uuid。